2012-12-01 60 views
0

可能重复:
Javascript: Object Literal reference in own key’s function instead of ‘this’JavaScript对象字面量&“this”上下文?

我有这个简单的代码:

var myObj = { 
    init: function() 
    { 
     this.Name = "Royi"; 
     this.BindMe(); 
    } 
    BindMe: function() 
    { 
     $('myButton').on("click", this.Work); 
    }, 
    Work: function() 
    { 
     var self = this; <-------- 
    } 
} 

运行:

​​

这是一个SIMP对象文字。 问题出在Work方法上。我想让它知道thismyObj

有2种方式做这件事的:

选项#1

BindMe,点击时,通过转移上下文$('myButton').on("click",{self:this}, this.Work);

and Work do:

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

选项#2

var self = myObj ;

问题

  • 有没有做任何其他方式?

  • 哪个更好/正确的方法?

+0

是不是使用对象字面选项? –

+0

@Bergi我已经看到了这个问题。它不提供答案。 (对我的具体问题)。 –

+0

@AndrewWhitaker号我想在字面对象中学习这种行为。 –

回答

3

不要将其添加为数据事件对象。相反,使用.bind()或jQuery的ISH(跨浏览器)proxy提供正确的thisArg的函数(见MDN的introduction to the this keyword):

$('myButton').on("click", $.proxy(this, "Work")); 
+0

'$ .proxy'和'Function#bind'有什么区别? –

+0

在我看来'$ .proxy(f,t)'和'f.bind(t)'是一样的。我对吗? –

+0

不错的解决方案。 (p.s.这个答案不是重复的问题FYI)。但是,关于我的第二种选择,可以这么做吗? –

2

你可以通过上下文来处理函数的关闭工作的一部分:

$('myButton').on("click", (function(context) { 
    return function() { 
     context.Work 
    }; 
})(this)); 

不用说,这是跨浏览器,因为它依赖于JS的核心功能之一。

相关问题