Javascript继承实例属性?

时间:2015-05-19 15:42:39

标签: javascript

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中编写代码,为子类arr的每个实例定义一个B变量,使arr成为每个B的新对象。 1}}实例。我可以通过在this.arr = []构造函数中设置B来实现这一点,但这可以通过编写到A上的代码来实现吗?

3 个答案:

答案 0 :(得分:2)

您在Javascript中继承的想法存在很大问题。在javascript中,你真的有对象,这就是它。构造函数是使用new调用并创建新对象的方法。

这部分代码并非right,因为您正在使用从A创建的对象创建原型...那就是说,您并未真正使用原型{ {1}}。由于每个人的继承并不存在,因此您必须实现一些能够调用创建对象A所需的每个构造函数的东西。

B

您应该使用此方法:

B.prototype = new A();

在这种情况下,你将在B中拥有A的所有原型......但如果有必要,你仍然必须调用B.prototype = Object.create(A.prototype) 的构造函数。

A

使用更复杂的库,最终可能会在python中继承类似于function A() { this.arr = [] } function B() { A.call(this) } 的继承。如果您真的参与其中,您还可以创建一个自动调用每个子原型的每个构造函数的结构。

答案 1 :(得分:0)

也许这就是你要找的东西:

{{1}}

使用Object.create(),你可以创建一个具有特定原型的对象,我相信这正是你想要做的。

答案 2 :(得分:0)

我能想到的一种方法是:

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

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