2016-03-22 3 views
0

Я читаю код узла, написанный моим бывшим коллегой. Я не профессионал javascript-программист, но я вижу много кода, который выглядит как синтаксический сахар. для например:Синтаксис связывания Javascript

_.bind(this._work, this), 

не это точно так же, как вызов

this._work 
+0

'' bind' и extend' популярные методы подчеркивания (подчеркивания является библиотека JS). См. [_.bind] (http://underscorejs.org/#bind) и [_.extend] (http://underscorejs.org/#extend) для получения более подробной информации. – csum

+0

Я знаю это. Я спрашиваю, не нужны ли над ними строки кода? – konquestor

+0

Требуется ли .bind(), зависит от контекста, и вы не указали контекст. Вызов .bind без использования возвращаемого значения не вызывает вашу функцию .work(). Если возвращаемое значение передается какой-либо другой функции в качестве обратного вызова, то вам, скорее всего, нужно сделать .bind(). – nnnnnn

ответ

2

Это создает копию функции с this привязанного к правильному объекту. Это может быть полезно, когда вы передаете функции.

function log(msg) { 
 
    document.querySelector('pre').innerText += msg + '\n'; 
 
} 
 

 
var _ = { 
 
    bind: function(f, self) { 
 
    // Simplified bind implementation 
 
    return f.bind(self); 
 
    } 
 
}; 
 

 
function runFunc(f) { 
 
    f(); 
 
} 
 

 
var obj = { 
 
    myName: 'Mike', 
 
    printName: function() { 
 
    log(this.myName); 
 
    } 
 
}; 
 

 
obj.printName(); // "Mike" 
 
runFunc(obj.printName); // undefined 
 
runFunc(_.bind(obj.printName, obj)); // "Mike"
<pre></pre>

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