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

Moo*_*oon 2 javascript bind call ecmascript-5

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

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

var obj = {
  method: function(name){
    this.name = name;
  }
};

obj.method.bind(obj,"hello");
Run Code Online (Sandbox Code Playgroud)

是不是与obj.method.call(obj,"你好")相同

kan*_*gax 12

不,它不完全相同.

使用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只是遵循已经流行和需求的东西.