gpt4 book ai didi

javascript - 执行从 Javascript 构造函数数组访问的构造函数父级的 "static"方法

转载 作者:行者123 更新时间:2023-12-03 04:27:45 26 4
gpt4 key购买 nike

唷,连问题都很难写。问题是:我有一个“游戏”,更像是一个随机模拟器,它需要从一系列操作中选择一个随机操作,如下所示:

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:这是一个相对较小的非营利项目,适合一大群 friend ,我不需要它在每个浏览器中运行,它需要在 Chrome 中运行,我可以告诉他们使用 Chrome为了它。

最佳答案

由于您只需要使用 Chrome,因此我建议使用 ES6 class 语法,它可以正确执行所有继承,而不会造成困惑。这包括您的 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;
}
}

关于javascript - 执行从 Javascript 构造函数数组访问的构造函数父级的 "static"方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43626545/

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