具有特权功能的Javascript继承

时间:2012-03-20 03:54:40

标签: javascript inheritance prototypal-inheritance

我正在简化我的例子,以了解我的问题的核心。我有一个具有特权功能的基础Javascript类。我真的需要隐藏myVar而不被人看见,我也真的想继承baseClass

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(这让我想要堵嘴)
  3. 我不是javascript大师所以我希望有人会有个好主意。

    提前致谢

1 个答案:

答案 0 :(得分:0)

首先,您不需要创建baseClass实例来设置继承。您正在创建一个从未使用过的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

中有关继承的帖子