唷,即使这个问题很难写。这里的问题:我有一个“游戏”,更像是一个随机的模拟器,它需要选择从操作数组随机行动,像这样的:执行从Javascript中的构造函数数组中访问构造函数的父节点的“静态”方法
actions = [ Action1, Action2, Action3 ]
我已经行动写成类从继承操作父类:
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为它。
'Action1.prototype =新的Action();'是的原因[您的OOP不起作用]一个(https://stackoverflow.com/questions/12592913/what-is-the-原因是使用新关键字在这里) – Bergi