2014-07-07 2 views
0

Каков наилучший способ использования Bind. Я использовал, как это, и это работает, но заинтересованы в поиске наилучшего из возможных вариантовПравильный способ использования Bind

ObjectProcessor = function (pathList) { 
    this.data = null; 
} 
ObjectProcessor.prototype = { 
    callServer: function() { 
     ajaxObject.Get("api/Path", this.callReceive.bind(this), null, this.callError.bind(this), this.callComplete.bind(this)); 
    }, 
    callReceive: function (source) { 

     this.data = source; 
    }, 
    callComplete: function (source) { 
     // do something 
    }, 
    callError: function (source) { 
     // Show Error 
    } 
}; 
+1

используя аргументы обратного вызова ajax вместо «this» в вашем обработчике, я думаю, что вам не понадобится привязка. – dandavis

+0

Синтаксис верен, но способ, которым вызываются функции, не должен работать отлично, без 'bind' – adeneo

+0

@adeneo, мы не знаем, как функция ajaxObject вызывает функции. Поэтому он, скорее всего, будет работать без привязки. –

ответ

0

Используйте bind, когда вам нужен новый экземпляр функции которого this значение явно устанавливается на то, что вы прошли в с bind() вызова ,

В ECMAScript 5 указан дополнительный метод bind(). Метод bind() создает новый экземпляр функции, значение которого равно , связанное со значением, которое было передано в bind(). (Zakas, Профессиональный JavaScript для веб-разработчиков, 3-е изд.,, 146).

Главным преимуществом, по-видимому, является использование bind() вместо закрытий, где множественные замыкания заставят код читать трудно. См. Стр. 738 «Функциональное связывание» в Заках для большего. Вкратце,

Функциональное связывание включает в себя создание функции, которая вызывает другую функцию со специфическим значением и с конкретными аргументами. Этот метод часто используется в сочетании с обратными вызовами и событиями обработчиками для сохранения контекста выполнения кода при передаче функций вокруг как переменные. (Zakas, 738)

Связанные функции полезны всякий раз, когда указатель функции должны быть переданы в качестве значения и что функция должна быть выполнена в определенном контексте . Они чаще всего используются для обработчиков событий и с setTimeout() и setInterval(). Тем не менее, связанные функции имеют больше служебных данных, чем обычные функции - им требуется больше памяти и немного медленнее из-за множества вызовов функций - так что лучше всего использовать использовать их только при необходимости. (Zakas, 740-41)

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