[英]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
。 如果您真的很喜欢它,还可以创建一个结构,该结构将自动调用每个子原型的每个构造函数。
我可以想到的一种工作方式是:
function A(){
this.arr = [];
}
function B(){
A.call(this);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.