gpt4 book ai didi

javascript - 正确的 Javascript 继承

转载 作者:数据小太阳 更新时间:2023-10-29 05:03:11 24 4
gpt4 key购买 nike

我想知道是否可以在 javascript 中继承构造函数。在下面的示例中,我希望 Moveablexy 参数分配给 this.xthis.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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com