继承并使用超类';javascript中的s构造函数
我想知道是否可以通过自动使用超类的构造函数在javascript中实例化子类。继承并使用超类';javascript中的s构造函数,javascript,inheritance,Javascript,Inheritance,我想知道是否可以通过自动使用超类的构造函数在javascript中实例化子类。 考虑这一点(灵感): 但是,在第一个示例中,我遇到了以下代码行: Cat.prototype.constructor = Cat; //Otherwise instances of Cat would have a constructor of Mammal 我认为这正是我所需要的:A1和A2的实例具有A的构造函数。不幸的是,注释掉A1.prototype.constructor=A1并清空A1的主体(同样适用于A
考虑这一点(灵感): 但是,在第一个示例中,我遇到了以下代码行:
Cat.prototype.constructor = Cat;
//Otherwise instances of Cat would have a constructor of Mammal
我认为这正是我所需要的:A1
和A2
的实例具有A
的构造函数。不幸的是,注释掉A1.prototype.constructor=A1
并清空A1
的主体(同样适用于A2
)不起作用:
function A1() {}
A1.prototype = new A();
function A2() {}
A2.prototype = new A();
var a1 = new A1("foo").whatAmI(); //I'm an instance of A1, my prop is undefined
var a2 = new A2("bar").whatAmI(); //I'm an instance of A2, my prop is undefined
最后,将A
的构造函数更改为使用arguments
对象而不是显式传递prop
也没有效果:
function A() {
this.prop = arguments[0];
}
甚至可以通过稍微摆弄prototype
属性来实现我想要的吗
我想这正是我需要的:A1和A2的实例
具有A的构造函数
不,他们不是这个意思。A1
和A2
函数仍然是它们自己调用的构造函数,您无法更改它们
本文描述的问题是,当覆盖AX.prototype
时,所有实例继承以指出其构造函数的.constructor
属性不再有效。另见(和相关问题)
不幸的是,注释掉了A1.prototype.constructor=A1
和
清空A1的主体(A2也一样)不起作用
通过清空身体,它不再做任何事情。您仍然需要显式地调用A
,这是无法避免的。你可以做的是创建一个泛型工厂,为a
创建子类,它不做任何特殊的事情,但我认为这不值得
哦,别忘了:
我想这正是我需要的:A1和A2的实例
具有A的构造函数
不,他们不是这个意思。A1
和A2
函数仍然是它们自己调用的构造函数,您无法更改它们
本文描述的问题是,当覆盖AX.prototype
时,所有实例继承以指出其构造函数的.constructor
属性不再有效。另见(和相关问题)
不幸的是,注释掉了A1.prototype.constructor=A1
和
清空A1的主体(A2也一样)不起作用
通过清空身体,它不再做任何事情。您仍然需要显式地调用A
,这是无法避免的。你可以做的是创建一个泛型工厂,为a
创建子类,它不做任何特殊的事情,但我认为这不值得
哦,别忘了:
你为什么要清空尸体?只是不要重置构造函数,你应该得到你想要的结果。你为什么要清空实体?只是不要重置构造函数,你应该得到你想要的结果。
function A() {
this.prop = arguments[0];
}
Cat.prototype.constructor = Cat;
//Otherwise instances of Cat would have a constructor of Mammal
subclass(parent) {
function Child() {
parent.apply(this, arguments);
}
Child.prototype = Object.create(parent.prototype);
Child.prototype.constructor = Child;
return Child;
}
function A(prop) {
this.prop = prop;
}
A.prototype.whatAmI = function() {
console.log(
"I'm an instance of %s, my prop is %s",
this instanceof A1? "A1" : "A2",
this.prop
);
};
var A1 = subclass(A),
A2 = subclass(A);