唷,即使這個問題很難寫。這裏的問題:我有一個「遊戲」,更像是一個隨機的模擬器,它需要選擇從操作數組隨機行動,像這樣的:執行從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