我是一個javascript新手,所以我現在寫的是難看的代碼,有時候是因爲我缺乏經驗,和我習慣的語言有多不同,我會在下面的作品中發帖,但是我想知道我是以正確的方式來做還是可能有用,但這是一種可怕的做法,或者有更好的辦法。基本上,我有一個小傢伙在網格中移動,他從服務器接收一個動作,他可以在8個方向移動(int):0:向上,1:向右,2:向右。 7:左上。Javascript - 原型函數數組
服務器將發送給他這個值,他必須採取正確的行動......現在,而不是使用開關結構。我創建了一個功能黨團(),goLeft()等,並在一個數組裝載他們,所以我有這樣的方法:
var getActionFunction = actions[action];
actionFunction();
然而,如何處理這件事了是這樣的:
1)創建一個構造函數:
function LittleDude(container) {
this.element = container; //I will move a div around, i just save it in field here.
}
LittleDude.prototype.goUp() {
//do go up
this.element.animate(etc...);
}
LittleDude.prototype.actions = [LittleDude.prototype.goUp, LittleDude.prototype.goUpLeft, ...];
//In this array I can't use "this.goUp", because this points to the window object, as expected
LittleDude.prototype.doAction = function(action) {
var actionFunction = this.actions[action];
actionFunction(); //LOOK AT THIS LINE
}
現在,如果你注意,最後一行將不會工作。這是因爲:當我使用索引來訪問數組,它返回一個LittleDude.prototype.goUp例如...所以「這個」關鍵字是不確定的..
GOUP具有聲明「this.element」 ......但「這」沒有定義,所以我必須把它寫這樣的:
actionFunction.call(this);
所以我doAction看起來就像這樣:
LittleDude.prototype.doAction = function(action) {
var actionFunction = this.actions[action];
actionFunction.call(this); //NOW IT WORKS
}
我需要知道這是否是駭人聽聞或者我違反了某種「不要做這個」規則。或者也許它可以用更好的方式書寫。因爲在我看來,把它添加到原型中似乎有點奇怪,但將它視爲一種獨立的功能。
我認爲這個問題更適合於http://codereview.stackexchange.com/(標記爲移動) – Bergi
'......。原型......「應該是小寫的。我猜這只是一個錯字,不是嗎? – Bergi
我不知道代碼審查,很好。這是一個錯字,是的,對不起 – arg20