我刚读完一篇关于ECMAScript 5严格模式的文章。
它说ECMAScript 5添加了.bind()。
var obj = {
method: function(name){
this.name = name;
}
};
obj.method.bind(obj,"hello");它与obj.method.call(obj,"hello")不一样吗?
发布于 2012-03-09 14:22:37
不,不一样。
使用bind,您正在生成一个函数,而不调用任何东西。使用call --就像在obj.method.call(obj, 'hello')中一样--您实际上是在调用一个方法。
与obj.method.bind(obj, 'hello')“相同”的表达式是function(){obj.method.call(obj, 'hello')}。那就更残酷了。这正是ES5试图为之提供便利的关键所在。
引入bind也有历史原因;几年前,它作为Prototype.js中的一种辅助方法开始流行起来。然后进入其他流行的库,如underscore.js。ES5只是追随了已经很受欢迎和有需求的产品。
发布于 2015-09-26 20:15:30
从现有函数中创建新函数的主要原因是能够将其与调用它的对象一起传递。考虑到这一点:
var obj = {
x:"Hello",
printPropX: function() {
alert(this.x);
}
};
setTimeout(obj.printPropX.bind(obj), 1000); // will alert "Hello" after 1 second
setTimeout(obj.printPropX, 1000); // will fail as 'this' won't be defined inside the function body once invoked虽然printPropX()是object 'obj‘的一个成员函数,但是它不会被'this’设置为'obj‘来调用,除非使用bind()绑定。
https://stackoverflow.com/questions/9625600
复制相似问题