2017-10-17 67 views
0

我有一个对象像这样:'this'(内部方法)不会引用原始对象吗?

let game = { 
    canvas: document.getElementById('main_canvas').getContext("2d"), 
    clear: function(){ 
     this.canvas.clearRect(0,0,400,400); 
    }, 
    update: function(){ 
     this.clear(); 
     //more code 
    }, 
}; 

在我明确的方法一切正常使用“这个”指的是“游戏”,但是当我在它不是指的“更新”的方法用“这个”到'游戏'?当我使用game.clear();一切正常,但'这'我得到undefined。如果有人知道这个原因,请发表回复。我最近了解了对象并知道箭头函数不会给出'this',但认为像上面那样的匿名函数可以让我引用'父'或owner对象。

+0

你正在使用'this'是你应该构造函数使用它(当您通过调用与'new'功能使对象的实例)的方式,而不是静态对象文本的方式。 –

+1

'this'的值取决于函数的调用方式。所以告诉我们如何调用'game.update'。可能是[如何在回调中访问正确'this'的副本?](https://stackoverflow.com/q/20279484/218196) –

+0

您还应该阅读[“this”关键字如何工作?]( https://stackoverflow.com/q/3127429/218196),https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this和https://github.com/getify /你不知道JS/tree/master/this%20%26%20object%20原型 –

回答

0

您需要使用.bind

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind

这实质上它绑定到创建方法的对象。

它应该看起来像这样。

let game = { 
    canvas: document.getElementById('main_canvas').getContext("2d"), 
    clear: function(){ 
     this.canvas.clearRect(0,0,400,400); 
    }.bind(this), 
    update: function(){ 
     this.clear(); 
     //more code 
    }.bind(this), 
}; 
+0

或者'game.update()',它可以工作,而不是像'callback = game.update; callback()',这不起作用。 – ArneHugo

+1

如果有ES6支持(如使用babel等转译器)可以使用箭头功能。 –

+0

您可能想要展示他们如何将'.bind'应用于他们的案例。 –

相关问题