我想知道是否可以在javascript中继承构造函数。在下面的例子中,我想要Moveable
分派x
and y
论点this.x
and this.y
分别如我所定义Sprite
。另外,在不创建祖先实例的情况下定义原型的最佳方法是什么(但仍然简短且可读)?最好将它分配在类本身中,而不是像我现在这样在外部范围中:
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();
调用超类构造函数的标准方法是使用Function.call https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call:
function Moveable(x, y) {
Sprite.call(this, x, y);
}
至于原型,您可以执行以下操作来链接原型,而无需创建超类的实例:
function makePrototype(superclass) {
function f() { }
f.prototype = superclass.prototype;
return new f();
}
Moveable.prototype = makePrototype(Sprite);
这使用虚拟构造函数来创建一个与以下对象共享相同原型的对象Sprite
,因为这就是 JavaScript 所关心的,所以实例Moveable
被考虑instanceof Sprite
.
这并不像您所要求的那样“简短且可读”,但唯一的其他选择是完全跳过原型并直接在构造函数中分配成员。
Edit:正如@Raynos 指出的,您还想设置constructor
属性(默认情况下由 JavaScript 完成,但一旦重置就会丢失Moveable.prototype
):
Moveable.prototype.constructor = Moveable;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)