如何引用對象從$。員額內()調用
使用變量名:
var MyObject = {
func1 : function() {
// Does something
},
func2 : function() {
// Send an AJAX request out
$.post('', $('form').serialize(), function(response) {
// Call the first function
MyObject.func1(); // <== Using the name
}, 'json');
}
};
又見alexP's answer,從而推廣一個位(例如, ,如果將名稱MyObject
更改爲其他名稱,則無需在兩個位置執行此操作)。
我怎樣才能使這個參考點到對象本身,而不是$.post
請求?
如果你真的希望它是this
,你可以做一對夫婦的方式。有jQuery的$.proxy
:
var MyObject = {
func1 : function() {
// Does something
},
func2 : function() {
// Send an AJAX request out
// Note ---------v
$.post('', $('form').serialize(), $.proxy(function(response) {
// Call the first function
this.func1(); // <== Using `this` now
}, 'json'), MyObject);
// ^^^^^^^^^^----- note
}
};
或者ES5的Function#bind
:
var MyObject = {
func1 : function() {
// Does something
},
func2 : function() {
// Send an AJAX request out
$.post('', $('form').serialize(), function(response) {
// Call the first function
this.func1(); // <== Using `this` now
}, 'json').bind(MyObject));
// ^^^^^^^^^^^^^^^----- note
}
};
請注意,並非所有的瀏覽器都ES5的bind
的是,雖然它是可以勻的特徵之一(搜索「ES5墊片」爲幾個選項)。
通過不使用它在所有:'this.func1();'=>'func1的();' –
@SnowBlind:不,這會導致一個'ReferenceError'。上面的'func2'範圍內沒有'func1'。 –
@ T.J.Crowder呵呵,你說得對.. –