在JavaScript中有一种方法可以将私有成员从基类继承到子类吗?

我想实现这样的目标:

function BaseClass() {
  var privateProperty = "private";

  this.publicProperty = "public";
}

SubClass.prototype = new BaseClass();
SubClass.prototype.constructor = SubClass;

function SubClass() {
  alert( this.publicProperty );   // This works perfectly well

  alert( this.privateProperty );  // This doesn't work, because the property is not inherited
}

如何实现类似于类的模拟,就像在其他可以继承私有(受保护)属性的oop语言(例如C ++)中一样?

谢谢你, David Schreiber

有帮助吗?

解决方案

使用道格拉斯Crockfords电源构造函数模式(链接到视频),您可以实现这样的受保护变量:

function baseclass(secret) {
    secret = secret || {};
    secret.privateProperty = "private";
    return {
        publicProperty: "public"
    };
}

function subclass() {
    var secret = {}, self = baseclass(secret);
    alert(self.publicProperty);
    alert(secret.privateProperty);
    return self;
}

注意:使用电源构造函数模式时,不要使用 new 。相反,只需说 var new_object = subclass();

其他提示

使用某种标记标记您的私有变量,例如前导下划线_ 这样你知道它是一个私有变量(虽然从技术上讲它不是)

this._privateProperty = "private";
alert( this._privateProperty )

这是不可能的。这不是一个真正的私有财产 - 它只是一个常规变量,只能在定义它的范围内使用。

无法完成,但您可以从类原型中删除该属性,以便它不会被继承:

SubClass.prototype.privateProperty  = undefined;

这样它就不会被继承,但你需要为每个“私人”做到这一点。基类中的属性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top