2014-12-04 153 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

相关问题