我已經寫了一個跳棋遊戲模型,其中包含一個包含一堆Piece對象的Board對象。 Piece對象有一個事件(pieceMoved),每次移動它們時都會觸發它們。將方法添加到Javascript中的對象實例並使用其中的'this'關鍵字
我正在使用EaselJS在canvas元素中呈現此遊戲模型。
我做的第一件事就是創建一個easeljs形狀對象來以圖形方式表示每件作品。
我希望處理件的相應形狀對象上的pieceMoved事件,以便我可以更新形狀位置。
,我創建的形狀和分配事件處理程序的代碼看起來是這樣的 -
for (x=0;x<=(board_.getColCount()-1);x++) {
for (y=0;y<=(board_.getRowCount()-1);y++) {
var piece = board_.getPieceAt(x, y);
if (!piece) continue;
var circ = new Shape();
circ.eventHandler = function(pieceObj) {
this.x = pieceObj.x*squareSize;
this.y = pieceObj.y*squareSize;
}
piece.addEventHandler(circ.eventHandler);
....
的問題是,在事件處理程序內的「這個」關鍵詞並不是指正確的事情。我也試過以下 -
piece.addEventHandler(function(px) { return circ.eventHandler; });
但是,'this'指的是錯誤的對象。
做這種事情的正確方法是什麼?
工廠選項是目前爲止唯一的工作。讓我畏縮了這麼多簡單的代碼。我能做些什麼來使它更漂亮? – NoPyGod
@NoPyGod - 我已經添加了對美化我的答案的嘗試。請注意,對於IE8及更早版本,您需要[自己添加'Array.forEach()'](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach#Compatibility) – gilly3
哎呦,我只是注意到你的編輯。 'Array.forEach()'在這裏沒有幫助。看起來我混淆了你正在迭代的項目。好吧。 – gilly3