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));