2012-05-15 3 views
4

У меня есть объект, который имеет несколько методов, и я хочу связать один из них как обработчик событий, но он использует другие методы из одного и того же объекта. Какова наилучшая практика сохранения контекста в функциях обратного вызова? Как я вижу из ядра JQuery для этой цели обычно используется метод $ .proxy, если честно, мне не нравится этот подход, это не очень понятно.Лучшая практика передачи контекста функции обратного вызова

Есть ли у вас какие-либо предложения? Заранее спасибо!

var obj = { 
    someMethod: function(){...}, 
    callback : function(){ 
     ... 
     this.someMethod(); // or this.someMethod.call(...) 
     ... 
    }, 
}; 
// wrong 
$.bind(elm, obj.callback); 
// using $.proxy 
$.bind(elm, $.proxy(obj.callback, obj)); 

ответ

4

Ваши варианты в основном:

  • $.proxy (как вы указали)
  • JavaScript 1,8-х Function.bind
  • неродного реализация Function.bind (как, например, , _.bind)
  • Встроенная анонимная функция: $.bind(elm, function() { obj.callback.apply(obj, arguments })

Ни один из них определенно не лучше или определенно хуже других (за исключением, может быть, встроенных анонимных функций, которые являются довольно подробными, и Function.bind, а друзья немного более общие, чем $.proxy). Более важно выбрать один и быть последовательным.

+0

Другой способ - использовать закрытие, но затем я должен выбрать другой способ организовать код, а не только объект. – Roman

Смежные вопросы