Javascript对象文本&&引用;这";上下文
可能重复:Javascript对象文本&&引用;这";上下文,javascript,scope,this,Javascript,Scope,This,可能重复: 我有一个简单的代码: var myObj = { init: function () { this.Name = "Royi"; this.BindMe(); } BindMe: function () { $('myButton').on("click", this.Work); }, Work: function () { var self = thi
我有一个简单的代码:
var myObj = {
init: function ()
{
this.Name = "Royi";
this.BindMe();
}
BindMe: function ()
{
$('myButton').on("click", this.Work);
},
Work: function ()
{
var self = this; <--------
}
}
这是一个简单的对象文本。
问题出在工作
方法上。我想让它知道这件事(myObj
)
有两种方法:
选项#1
在BindMe
中,单击时,通过以下方式传输上下文:
$('myButton')。打开(“单击”{self:this},this.Work)代码>
在工作中
执行:
var self=e.data.self…
//还需要添加e
选项2
写入var self=myObj代码>
问题
- 还有别的办法吗
- 哪种方法更好/正确
不要将其作为数据添加到事件对象中。相反,请使用或jQuery ish(交叉浏览器)为函数提供正确的thisArg(请参阅MDN):
不要将其作为数据添加到事件对象。相反,请使用或jQuery ish(交叉浏览器)为函数提供正确的thisArg(请参阅MDN):
可以将上下文作为闭包的一部分传递给处理程序函数:
$('myButton').on("click", (function(context) {
return function() {
context.Work
};
})(this));
不用说,这是跨浏览器的,因为它依赖于JS的核心功能之一。您可以将上下文作为闭包的一部分传递给处理程序函数:
$('myButton').on("click", (function(context) {
return function() {
context.Work
};
})(this));
不用说,这是跨浏览器,因为它依赖于JS的核心功能之一。是否使用对象文字作为选项?@Bergi我已经看到了这个问题。它没有提供答案。(针对我的具体问题)。@AndrewHitaker No.我想在文字对象中学习这种行为。使用文字对象不是选项吗?@Bergi我已经看到了这个问题。它没有提供答案。(针对我的具体问题)。@AndrewWhitaker No。我想在literal对象中学习这种行为。$.proxy
和函数#bind
之间有什么区别?在我看来,$.proxy(f,t)
与f.bind(t)
是一样的。我说的对吗?很好的解决方案。(请注意,此答案并非针对重复问题,仅供参考)。但是,关于我的第二个选择,这样做可以吗?@JanDvorak@RoyiNamir:是的,当然可以,但是如果你想静态地引用myObj
,为什么要将它绑定到一个局部变量self
?看看这是否是一个好的解决方案。$代理
和函数#绑定
之间有什么区别?在我看来,$。代理(f,t)
与f.bind(t)
是一样的。我说的对吗?很好的解决方案。(请注意,此答案并非针对重复问题,仅供参考)。但是,关于我的第二个选择,这样做可以吗?@JanDvorak@RoyiNamir:是的,当然可以,但是如果你想静态地引用myObj
,为什么要将它绑定到一个局部变量self
?看看这是否是一个好的解决方案。
$('myButton').on("click", (function(context) {
return function() {
context.Work
};
})(this));