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