我经常使用这样的结构:
var $this, url, callback; //some private vars
loadCallback = function($that, url, callback) {
return function(responseText, textStatus, req) {
...
};
})($this, url, callback)
然而,这并不是很舒服。还有其他选择吗?
我已经看了jQuery.proxy,但是这个函数似乎修复了“this”变量,所以loadCallback无法通过应用另一个“this”上下文来调用。
答案 0 :(得分:2)
在现代浏览器中使用bind
。实现你自己的简单版本:
function bind(fn, _this) {
var _args = Array.prototype.slice.call(arguments, 2);
return function() {
return fn.apply(_this, _args.concat(Array.prototype.slice.call(arguments)));
}
}
用法:
var loadCallback = bind(function(url, responseText, textStatus, req) {
console.log(url, responseText)
}, this, url);