gpt4 book ai didi

javascript - 在 JavaScript 中扩展/覆盖?

转载 作者:行者123 更新时间:2023-12-02 19:40:03 27 4
gpt4 key购买 nike

我想使用 JavaScript 和 <canvas> 编写一个小游戏但首先我想确定使用对象的“正确”或至少通用的方法。

我特别难以理解的一个主题是如何实现 overriding方法。

当我创建一个对象时,我可能会这样:

function MyObject()
{
var base = {};

base.i = 0;
base.update = function()
{
base.i ++;
}

return base;
}

然后,当我创建另一个应以相同成员开头的对象时,我使用:

function AnotherObject()
{
var base = new MyObject();

base.j = 0;

return base;
}

我想向 AnotherObject.update() 添加更多内容同时仍然运行我在 MyObject.update() 中的逻辑,但是当我在 AnotherObject() 内执行此操作时:

base.update = function()
{
j ++;
}

那么我当然会丢失我在 MyObject.update() 中添加的逻辑.

我该如何写AnotherObject.update()这样它也调用原来的 update()MyObject 定义的方法?

最佳答案

首先,我建议您阅读这篇优秀的文章 excellent MDN article 。它会给你启发。

您可以通过这种方式实现子类化:

function MyObject() {
this.i = 0;
}

MyObject.prototype.update = function() {
this.i++;
}

function AnotherObject() {
MyObject.call(this);
this.j = 0;
}

AnotherObject.prototype = new MyObject;

AnotherObject.prototype.constructor = AnotherObject;

AnotherObject.prototype.update = function() {
MyObject.prototype.update.call(this);
this.j++;
}

obj = new AnotherObject();
console.log(obj.i); //0
console.log(obj.j); //0

obj.update();
console.log(obj.i); //1
console.log(obj.j); //1

console.log(obj instanceof MyObject) //true
console.log(obj instanceof AnotherObject) //true

关于javascript - 在 JavaScript 中扩展/覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10492602/

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