可能重复:
Javascript: Object Literal reference in own key’s function instead of ‘this’
我有这个简单的代码:
var myObj = {
init: function ()
{
this.Name = "Royi";
this.BindMe();
}
BindMe: function ()
{
$('myButton').on("click", this.Work);
},
Work: function ()
{
var self = this; <--------
}
}
跑步:
myObj.init();
这是一个简单的Object文字。
问题出在Work
方法上。我想让它知道this
(myObj
)
有两种方法:
选项#1
在BindMe
中,点击时,通过以下方式传输上下文:
$('myButton').on("click",{self:this}, this.Work);
并在Work
中执行:
var self = e.data.self...
//还需要添加e
选项#2
写var self = myObj ;
问题
还有其他办法吗?
哪种方式更好/更正?
答案 0 :(得分:3)
不要将其作为数据添加到事件对象中。相反,使用.bind()
或jQuery-ish(crossbrowser)proxy
为函数提供正确的thisArg(请参阅MDN的introduction to the this
keyword):
$('myButton').on("click", $.proxy(this, "Work"));
答案 1 :(得分:2)
您可以将上下文作为闭包的一部分传递给处理函数:
$('myButton').on("click", (function(context) {
return function() {
context.Work
};
})(this));
毋庸置疑,这是跨浏览器,因为它依赖于JS的核心功能之一。