2016-03-22 58 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>