繁体   English   中英

Javascript继承实例属性?

[英]Javascript inheriting instance attributes?

function A(){
  // sort of like this
  // this.arr = [];
}

function B(){
  // not here though
  // this.arr = [];
}

B.prototype = new A(); // all B instances would share this prototypes attributes

// I want all B instances to have an arr attributes (array)
// of their own but I want the parent class to define it

var b1 = new B();
var b2 = new B();

b1.arr.push(1);
b2.arr.push(2);

b1.arr.length === 1; // should be true
b2.arr.length === 1; // should be true

我想在A中编写代码,为子类B每个实例定义一个arr变量,以便arr是每个B实例的新对象。 我可以通过在B构造函数中设置this.arr = []来实现这一点,但这是否可以通过将代码写入A来完成?

您在Java中继承的想法存在很大问题。 在javascript中,您确实有对象,仅此而已。 构造函数是一种用new调用并创建新对象的方法。

这部分代码并不right因为您正在使用从A创建的对象来创建原型。也就是说,您并不是真正在使用原型A 就像人们所说的那样,继承实际上并不存在,因此您必须实现将调用创建对象B所需的每个构造函数的东西。

B.prototype = new A();

您应该改用以下方法:

B.prototype = Object.create(A.prototype)

在这种情况下,您将拥有B中所有A的原型。但是,如果有必要,您仍然必须调用A的构造函数。

function A() {
   this.arr = []
}

function B() {
    A.call(this)
}

使用更复杂的库,您最终可能会继承并类似于python中的super 如果您真的很喜欢它,还可以创建一个结构,该结构将自动调用每个子原型的每个构造函数。

也许这就是您要寻找的:

B.prototype = Object.create(A.prototype);

使用Object.create()可以创建具有特定原型的对象,我相信这就是您要尝试的方法。

我可以想到的一种工作方式是:

function A(){
   this.arr = [];
}

function B(){
   A.call(this); 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM