在使用回調函數(例如AJAX調用)的內部函數時,它們在自己的環境中運行(this
是窗口對象),並且在編寫它們的地方不知道this
。我曾看到該2個解決方案:使用「self = this」和bind(this)用於內部函數之間是否存在顯着差異?
- 使用
self
或that
:
var Obj = function(){
var a = 1;
var subFunc = function(){
var self = this;
$.ajax({
url: 'something.x',
success: function(data){alert(self);}
});
}
return {
subtract : subFunc
}
};
var o = new Obj();
o.substract();
- 使用
bind
命令(通過自動裝箱的self
變量完成):(我不知道這是怎麼完成的)
var Obj = function(){
var a = 1;
var subFunc = function(){
$.ajax({
url: 'something.x',
success: function(data){alert(this);}.bind(this)
});
}
return {
subtract : subFunc
}
};
var o = new Obj();
o.substract();
解釋者實際開始解釋時有什麼不同?這對性能有什麼影響?
你有沒有試過[benchmark](http://jsperf.com/)呢? – VisioN 2013-03-01 09:14:19
你不應該調用'.bind(self)'而不是'.bind(this)'嗎? – 2013-03-01 09:17:08
@JakubKonecki不,我想它應該是'this',因爲它在對象字面值內調用,而不是在函數中調用。 – VisioN 2013-03-01 09:23:56