Javascript继承实例属性?

Javascript继承实例属性?,javascript,Javascript,我想在A中编写代码,为子类B的每个实例定义一个arr变量,这样arr就是每个B实例的一个新对象。我可以通过在B构造函数中设置this.arr=[]来实现这一点,但这是否可以通过将代码写入A来实现呢?在Javascript中继承的想法中存在一个大问题。在javascript中,您确实有对象,这差不多就是它。构造函数是使用new调用并创建新对象的方法 这部分代码并不是真正的正确的,因为您正在使用从。。。也就是说,您并没有真正使用原型A。由于“按说继承”实际上并不存在,您必须实现一些东西来调用创建对象

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

在Javascript中继承的想法中存在一个大问题。在javascript中,您确实有对象,这差不多就是它。构造函数是使用
new
调用并创建新对象的方法

这部分代码并不是真正的
正确的
,因为您正在使用从。。。也就是说,您并没有真正使用原型
A
。由于“按说继承”实际上并不存在,您必须实现一些东西来调用创建对象
B
所需的每个构造函数

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
您应改为使用此方法:

B.prototype = new A();
在本例中,您将拥有B中A的所有原型。。。但是如果有必要,您仍然必须调用
A
的构造函数

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

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

也许这就是你想要的:

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

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

通过使用,您可以创建具有特定原型的对象,我相信这就是您正在尝试的操作。

我可以想到的一种方法是:

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

无需调用
newa()
。当您在B的构造函数中调用A的构造函数时,就好像您调用了构造函数两次一样。在B的原型中,您实际上只需要使用
对象复制
A的原型。创建
function A(){
   this.arr = [];
}

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