2012-03-05 2 views
0

어제 coffeescript를 사용하여 자바 스크립트로 간단한 게임을 만들었습니다. 게임의 대부분은 사용자가 페이지에 양식을 제출 한 후에 인스턴스화되는 game 개체를 통해 실행됩니다. 양식에는 게임을 실행하기위한 변수와 옵션이 포함되어 있습니다.자바 스크립트 객체의 속성 값과 참조를 완전히 지우는 방법은 무엇입니까?

게임도 정상적으로 작동하지만 게임이 끝나면 양식이 다시 나타납니다. 사용자가 두 번째로 동일한 기능을 호출하고 이전 인스턴스 인 game 변수를 새 인스턴스로 덮어 씁니다 game 개체의 일부이지만, 내가 알아 차린 것은 기존 게임 개체가 설정 한 모든 기존 변수와 매개 변수를 다시 설정하지 않는다는 것입니다.

새 개체를 인스턴스화 할 때 이전 개체와 해당 매개 변수를 완전히 제거 할 수있는 방법이 있습니까?

내 개체가 coffeescript에서 '클래스'로 선언되었습니다.

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

가능한 중복 (http://stackoverflow.com/questions/684575/how-to :이 문제를 해결하려면 양식 제출 기능에 바인딩을 해제한다 -quickly-clear-a-javascript-object) – maxedison

+0

possible dup http://stackoverflow.com/questions/742623/deleting-objects-in-javascript – elclanrs

+0

여기에 시간이 많이 있습니다. 그냥 개체 자바 스크립트를 삭제하십시오. – maxedison

답변

1

delete game은 참조 만 개체를 ​​제거하지 않습니다. 문제는 이전 변수에 대한 참조가 어딘가에서 지속된다는 것입니다. 이 다른 사람이 될 수도 있지만 적어도 생성자의이 부분은 당신에게 문제를주고있다 :

($ 'section#board div.cell').bind 
    click:  @.makeMove 
    mouseleave: @.resetCell 
JQuery와 같은 이벤트에 여러 기능을 결합 할 수있다

; 이 경우 이전 함수와 새 함수 모두와 이전 함수는 이전 객체에 대한 참조를 보유합니다. [? 신속하게 자바 스크립트 객체를 삭제하는 방법]

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

실제로 플레이어 동작과 관련된 매개 변수가 도움이되었습니다. 답변 감사합니다. –

+0

@JustinHerrick 아직 문제가 있습니까? 그렇다면 더 많은 정보가 필요할 것입니다. –

+0

두 가지 문제점은 첫 번째 게임이 끝난 후 (그리고 모든 게임 이후) 시작 플레이어가 플레이어 1로 설정되지 않고 거의 일관되게 player2로 설정되고 기존 플레이어 변수가 그들이 인간 인 오래된 변수 .... 게임이 끝나면 수동으로 해당 오브젝트를 삭제 (참조 해제)해야한다고 생각하기 시작했습니다. –

관련 문제