2012-12-01 63 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的核心功能之一。

相關問題