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);
}