首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ECMAScript 5要添加.bind()?

为什么ECMAScript 5要添加.bind()?
EN

Stack Overflow用户
提问于 2012-03-08 21:54:11
回答 2查看 911关注 0票数 2

我刚读完一篇关于ECMAScript 5严格模式的文章。

它说ECMAScript 5添加了.bind()。

代码语言:javascript
复制
var obj = {
  method: function(name){
    this.name = name;
  }
};

obj.method.bind(obj,"hello");

它与obj.method.call(obj,"hello")不一样吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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只是追随了已经很受欢迎和有需求的产品。

票数 12
EN

Stack Overflow用户

发布于 2015-09-26 20:15:30

从现有函数中创建新函数的主要原因是能够将其与调用它的对象一起传递。考虑到这一点:

代码语言:javascript
复制
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()绑定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9625600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档