2012-03-05 65 views
0

我昨天在javascript中使用coffeescript做了一個簡單的遊戲。遊戲的大部分運行在用戶在頁面上提交表單後實例化的game對象中。該表格包含他們想要玩的遊戲的變量和選項。如何完全清除javascript對象的屬性值和引用?

在遊戲中一切正常,但遊戲結束後,我再次出現表單,如果用戶第二次提交表單,它應該調用相同的函數,並用新實例覆蓋舊的game變量game對象,但我注意到它不重置原始遊戲對象設置的所有現有變量和參數。

當新實例被實例化時,有什麼辦法可以完全刪除舊對象及其參數嗎?

這是我的對象在coffeescript中被聲明爲'class'。

window.Game = class Game 

    constructor: (options) -> 
    players = options[0] ? '1' 
    p1 = p2 = false 
    @player1 = new Player(options[1] ? 'X', p1) 
    @player2 = new Player(options[2] ? 'O', p2) 
    @cells = ($ "section#board .cell") 
    @cells.each -> 
     $(@).text(" ") 
     $(@).removeClass('score') 
    @currentPlayer = @player1 
    @availableMoves = 9 
    ($ 'section#board div.cell').bind 
     click:  @.makeMove 
     mouseleave: @.resetCell 

    setTimeout(@.computerMove(@currentPlayer), 1000) if parseInt(players) is 0 

我在通過此函數提交表單後調用此函數。

($ '#gameOptions').submit (event) -> 
    event.target.checkValidity() 
    event.preventDefault() 
    game = new Game [($ '#player-count') .val(), 
        ($ '#player-1-type').val(), 
        ($ '#player-2-type').val()] 

即使在重新實例化遊戲對象之前添加調用delete game也是如此。幻影變量依然存在。爲了簡潔起見,我發佈了咖啡信息以提高可讀性。

+0

[如何快速清除Javascript對象?](http://stackoverflow.com/questions/684575/how-to -quickly-clear-a-javascript-object) – maxedison 2012-03-05 22:52:16

+0

possible dup http://stackoverflow.com/questions/742623/deleting-objects-in-javascript – elclanrs 2012-03-05 22:52:28

+0

這裏已經被問過很多次了。只是搜索來刪除對象的JavaScript。 – maxedison 2012-03-05 22:52:33

回答

1

delete game不會刪除該對象,只有引用。問題是對舊變量的引用持續存在。有可能是別人,但最起碼​​的構造,這部分是給你的問題:

($ 'section#board div.cell').bind 
    click:  @.makeMove 
    mouseleave: @.resetCell 

jQuery是讓你綁定多個功能相同的事件;在這種情況下,舊的和新的功能以及舊的功能都會引用舊對象。爲了解決這個問題,你應該在表單提交功能中解除綁定:

($ 'section#board div.cell').unbind() 
+0

這確實有助於與玩家移動相關的參數。謝謝你的答案。 – 2012-03-06 03:39:23

+0

@JustinHerrick還存在問題嗎?如果是這樣,我們可能需要更多的信息。 – 2012-03-06 04:38:32

+0

我遇到的兩個問題是,第一場比賽結束後(以及每場比賽後綴),首發球員不會被設置爲球員1,它幾乎一致地設置爲球員2,並且現有的球員變量似乎持有他們是人類的舊變量.... 我開始認爲我可能需要在遊戲結束時手動刪除(取消引用)這些對象 – 2012-03-06 04:42:45

相關問題