2014-12-04 112 views
1

新秀戒備。在下面的代碼中,initializeBoard可以訪問屬性,當我啓動腳本時,控制檯返回'white'。但是當我點擊窗口內部時,我會得到'未定義'。我錯過了什麼頭腦明顯的東西? (獎勵:?什麼是搜索查詢會導致我的答案,而不必問)爲什麼我的方法沒有看到this.property?

var view = { 

    currentMove: 'white', 

    initializeBoard: function() { 
    console.log(this.currentMove); 
    }, 

    click: function(e) { 
    console.log(this.currentMove); 
    } 
} 

window.onload = function() { 
    view.initializeBoard(); 
    document.onclick = view.click; 
} 

回答

3

this值由確定函數如何被稱爲,而不是它是第一分配。

你是複製(引用)函數到document.onclick

當點擊事件發生時document.onclick被調用。 view.click不是調用(儘管它具有與document.onclick相同的值)。這意味着thisdocument而不是view

如果您想創建一個在正確的上下文中調用原始函數的包裝函數,請使用bind

document.onclick = view.click.bind(view); 
+0

我認爲這是有道理的!例如,將方法中的命令更改爲「console.log(view.currentMove);」會有多大的錯誤? – 2014-12-04 13:28:27

相關問題