呼,连问题都很难写。问题是:我有一个“游戏”,更像是一个随机模拟器,它需要从一系列动作中选择一个随机动作,如下所示:
actions = [ Action1, Action2, Action3 ]
我将操作编写为从 Action 父类继承的类:
function Action() {
this.targets = [];
this.used = [];
this.execute = function(player) {
doStuff();
return whatever;
};
}
//btw the below I've seen in a JS OOP tutorial but it doesn't work and I have to implement init() in every child action
Action.init = function(player) {
var a = new this.constructor();
return a.execute(player);
};
Action.checkRequirements = function() {
return true;
};
Action1.prototype = new Action();
Action1.prototype.constructor = Action1;
function Action1 {
this.execute = function(player) {
doStuff();
return whatever;
}
}
Action1.init = function(player) {
var a = new Action1();
return a.execute(player);
}
所以我正在做的是执行一个动作并得到它的结果是var foo = actions.getRandomVal().init();
(getRandomVal 是一个简单的自定义脚本,它从数组中返回一个随机值)它运行良好,创建了正确继承所有属性和方法的对象实例,执行 exec () 方法并返回其结果...但现在我有一个checkRequirements()
方法,我想在我希望执行的 100 多个操作中的 10% 中实现该方法,并且我希望它简单地从 Action 类继承,以便当它没有在子类中实现,它只是返回 true,我不知道如何实现。如果我这样做var a = actions.getRandomVal();
,然后a.checkRequirements();
它会抛出一个异常 a.checkRequirements 不是一个函数。
PS:这是一个(大型)朋友群的一个相对较小的非营利项目,我不需要它在每个浏览器中都可以运行,它需要在 Chrome 中运行,我可以告诉他们使用 Chrome 来实现它。
由于您只需要使用 Chrome,我建议使用 ES6class
语法,它可以正确地完成所有继承,而不会搞砸。这包括您的Action1
构造Action
函数,如您所期望的那样从构造函数继承属性(“静态类成员”)。
class Action {
constructor() {
this.targets = [];
this.used = [];
}
execute(player) {
doStuff();
return whatever;
}
static init(player) {
var a = new this(); // no .constructor
return a.execute(player);
}
static checkRequirements() {
return true;
}
}
class Action1 {
execute(player) {
doOtherStuff();
return whateverelse;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句