我想知道是否可以在 javascript 中继承构造函数。在下面的示例中,我希望 Moveable
将 x
和 y
参数分配给 this.x
和this.y
分别是我在 Sprite
中定义的。此外,在不创建祖先安装的情况下定义原型(prototype)的最佳方式(但仍然简短且可读)是什么?最好在类本身中分配它,而不是像我现在这样在外部范围内分配它:
function Sprite(x, y) {
this.x = x ? x : 0;
this.y = y ? y : 0;
this.getPos = function() {
return {
x: this.x,
y: this.y
};
};
}
function Moveable(x, y) {
}
Moveable.prototype = new Sprite();
最佳答案
调用父类(super class)构造函数的标准方法是使用 Function.call
:
function Moveable(x, y) {
Sprite.call(this, x, y);
}
至于原型(prototype),你可以做这样的事情来链接原型(prototype)而不创建父类(super class)的实例:
function makePrototype(superclass) {
function f() { }
f.prototype = superclass.prototype;
return new f();
}
Moveable.prototype = makePrototype(Sprite);
这使用虚拟构造函数创建一个对象,该对象与 Sprite
共享相同的原型(prototype),因为这是 JavaScript 所关心的,Moveable
的实例被认为是 instanceof Sprite
.
这并不像您要求的那样“简短易读”,但唯一的其他选择是完全跳过原型(prototype)并直接在构造函数中分配成员。
编辑:正如@Raynos 指出的,您还想设置 constructor
属性(默认情况下由 JavaScript 完成,但一旦您重置 Moveable.prototype
):
Moveable.prototype.constructor = Moveable;
关于javascript - 正确的 Javascript 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4985460/