我是Javascript编程的新手,我从面向对象编程的角度来看我的第一个应用程序(确实是一个游戏)(我知道js不是真正的面向对象,但是对于这个特殊的问题,我更容易开始这个).
我有一个"类"的层次结构,其中最顶层("Thing"类)定义了相关事物的列表(游戏中的附加项).它由ThingA类继承,由ThingA1和ThingA2类继承.
最小的例子是:
function Thing()
{
this.relatedThings = [];
}
Thing.prototype.relateThing = function(what)
{
this.relatedThings.push(what);
}
ThingA.prototype = new Thing();
ThingA.prototype.constructor = ThingA;
function ThingA()
{
}
ThingA1.prototype = new ThingA();
ThingA1.prototype.constructor = ThingA1;
function ThingA1()
{
}
ThingA2.prototype = new ThingA();
ThingA2.prototype.constructor = ThingA2;
function ThingA2()
{
}
var thingList = [];
thingList.push(new ThingA());
thingList.push(new ThingA1());
thingList.push(new ThingA2());
thingList.push(new ThingA2());
thingList.push(new Thing());
thingList[1].relateThing('hello');
Run Code Online (Sandbox Code Playgroud)
在代码的最后,当执行relatedThing时,每个ThingA,ThingA1和ThingA2将执行它(不是数组中的最后一个"Thing"对象).我发现如果我在ThingA原型中定义了relatedThing函数,它将正常工作.由于游戏的设计方式,我宁愿不必这样做.
也许我不了解原型如何在javascript中工作.我知道函数在所有对象之间共享,但我想执行将是个体的.有人可以解释为什么会发生这种情况以及如何解决这个问题?我不知道我做的继承是错误的,还是原型定义,或者是什么.
提前致谢.