Javascript对象文字& “这个”背景?

时间:2012-12-01 20:37:25

标签: javascript scope this

  

可能重复:
  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方法上。我想让它知道thismyObj

有两种方法:

选项#1

BindMe中,点击时,通过以下方式传输上下文:

$('myButton').on("click",{self:this}, this.Work);

并在Work中执行:

var self = e.data.self... //还需要添加e

选项#2

var self = myObj ;

问题

  • 还有其他办法吗?

  • 哪种方式更好/更正?

2 个答案:

答案 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的核心功能之一。