2012-03-20 84 views
0

我正在简化我的示例以了解我的问题。我有一个具有特权功能的基类Javascript类。我真的需要隐藏myVar以免被看到,我也很想继承baseClass具有特权功能的Javascript继承

function baseClass() { 
    var myVar = new coolClass(); 

    this.myPrivileged = function() { 
    myVar.coolFunction(); 
    } 
} 

我得到的问题是,我想继承,像这样:

function childClass() { 

} 
childClass.prototype = new baseClass(); 
childClass.prototype.reallyCoolFunction = function() {//Really cool stuff} 

但myVar的只有一个实例将永远被创建,这将无法工作,因为coolClass例如具有相关属性。 所以,如果我这样做:

var x = new childClass(); 
var y = new childClass(); 

x和y将有baseClass.myVar

相同的实例所以就我自己看着办,我有两个选择:

  1. 充分利用myPrivileged函数原型函数并公开myVar
  2. baseClass的内部复制并粘贴到childClass(这让我想要堵嘴)

我不是javascript的大师,所以我希望有人会有一个好主意。

在此先感谢

+0

你应该看看[coffeeScript](http://coffeescript.org/) – Kyle 2012-03-20 03:58:49

+0

@凯尔:你至少应该提出一些理由来评论你的评论。大多数人不愿意开始使用一些编译成JS的语言,因此无法进行调试。 – 2012-03-20 04:11:06

+0

@JuanMendes“无法调试?”不,不是。这只是你的意见。 – Kyle 2012-03-20 04:16:59

回答

0

首先,你不需要创建基类的一个实例只是设置继承。您正在创建一个从未使用过的coolClass实例。使用代理构造

function childClass() { 
    ... 
} 

function surrogateCtor() { 

} 

surrogateCtor.prototype = baseClass; 
childClass.prototype = new surogateCtor(); 

在你childClass,你需要调用父类的构造

function childClass() { 
    baseClass.call(this); 
} 

这将确保该基类初始化每次实例孩子上课时间http://jsfiddle.net/mendesjuan/h2ypL/

看我的帖子关于遗传在JS http://js-bits.blogspot.com/2010/08/javascript-inheritance-done-right.html