2013-09-26 29 views
0

我想在我創建的對象中引用this.foo,但是這是引用觸發該函數的HTML元素。當通過事件調用對象時,有什麼辦法可以保留對象中的引用?JavaScript無法引用此對象

這是怎麼回事的例子:

$('document').on('click','button',object.action); 

var object = { 
    foo : null, 
    action : function(){ 
    this.foo = "something"; 
    } 
}; 

的錯誤我會收到是

Uncaught TypeError: Object #<HTMLInputElement> has no variable 'var' 
+0

對不起,這只是一個示例來說明我的問題。 –

+0

把引號放在它「var」可能工作。 –

+1

您無法在JavaScript中使用保留關鍵字,如var –

回答

2

如果您想保留this,你應該附上事件那樣:

$('document').on('click','button',function() { object.action() });

另外,如果你使用這個對象,因爲它是在問題提出的,你不妨使用object代替this

var object = { 
    foo : null, 
    action : function(){ 
    object.foo = "something"; 
    } 
}; 

此外,您可能還需要熟悉BindCallApply - jQuery使用這些後臺用HTML元素替換this;

此外,var是一個保留關鍵字,您不應該將它用於屬性名稱;如果你真的想這樣做,使用字符串"var"並通過[]符號這樣的訪問:

var a = {"var": 1} 
a['var'] 
+0

這在IE中不起作用請參閱下方的瀏覽器兼容性表格。 –

+0

這對'.bind()'來說是正確的,它只是作爲參考,因爲實際解決方案不涉及到使用它 – adamziel

+0

通過在函數中包裝函數調用,我可以在我的對象中調用this.foo 。 –

0

變化this.varobject.var

的問題this指的語境這是從哪裏來的。 你可以點擊按鈕上的object.action,所以this#<HTMLInputElement>這裏。

而且,正如已經說過,不要使用保留字像var作爲變量名

0

您可以通過object作爲this值使用.apply()

$('document').on('click','button',function(){object.action.apply(object); }); 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

你的this應該參考object,但它不是最有可能的,因爲使用var這是一個reserved word的JavaScript腳本。

+0

只是一個註釋,在這個上下文中apply是多餘的 - 'object.action()'就足夠了,因爲'action'是直接在對象文字 – adamziel

+0

中定義的,這是多餘的我只是把它作爲一個例子來說明如何修復'this'的任何問題都沒有引用正確的對象。 –

0

var ist 保留 JavaScript中的詞。

這工作得很好:

$(document).ready(function(){ 

var myObj = { 
    myVal: null, 
    action:function(){ 
    this.myVal = "something"; 
    } 

}; 
myObj.action(); 
console.log(myObj.myVal); 

});

這裏link to JS Bin

我希望我能幫助。