2016-03-22 13 views
0

私の元同僚が書いたいくつかのノードコードを読んでいます。私は熟練したjavascriptのプログラマーではありませんが、私には構文的な砂糖のような多くのコードがあります。例えばのため:Javascriptのバインド構文

_.bind(this._work, this), 

これは、これは正しいオブジェクトにバインド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

を呼び出すとまったく同じではありません。これは、関数を渡すときに便利です。

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>