В jQuery 1.4 у вас есть метод $.proxy
, вы можете просто написать:
//...
bar: function(id) {
$.ajax({
url: "someurl",
success: $.proxy(this, '_updateDiv')
});
},
//...
$.proxy
принимает объект, который будет использоваться в качестве значения this
, и может принимать либо строку (член этого объекта), либо функцию, и он будет возвращать новую функцию, которая всегда будет иметь конкретный объем.
Другой альтернативой является функция bind
, теперь часть стандарта ECMAScript Fifth Edition является лучшей:
//...
bar: function(id) {
$.ajax({
url: "someurl",
success: function(data) {
this._updateDiv(id, data);
}.bind(this)
});
},
//...
Эта функция будет доступна изначально в ближайшее время, когда механизмы JavaScript полностью реализуют стандарт ES5, а пока вы можете использовать следующую 8-строчную реализацию:
// The .bind method from Prototype.js
if (!Function.prototype.bind) { // check if native implementation available
Function.prototype.bind = function(){
var fn = this, args = Array.prototype.slice.call(arguments),
object = args.shift();
return function(){
return fn.apply(object,
args.concat(Array.prototype.slice.call(arguments)));
};
};
}