这句话的含义是什么:“all = Promise.all.bind(Promise)”​​?

时间:2017-08-15 13:32:18

标签: javascript binding promise

我知道bind会将方法绑定到传递的对象。但是,我在这里不理解的是,为什么我们将类名传递给绑定?

我从一位专家那里得到的一个答案是,“这是为了让这个功能'独立'”,我再也听不懂了。我可能完全愚蠢到不理解并对一个陈述完全生气,但是,有人可以解释一下吗?

1 个答案:

答案 0 :(得分:4)

这不是“类名”,而是一个对象。 (具体来说,一个函数;函数是JavaScript中的对象。更具体地说,是一个构造函数函数。)

Promise.all(...)all对象上查找Promise属性,并在all设置为this的情况下调用Promise。因此,仅使用all(...)执行此操作时,我们需要绑定函数,以便this始终为Promise,即使我们以不同的方式调用它。这就是all = Promise.all.bind(Promise)所做的。

如果我们刚刚all = Promise.all,那么当我们调用all(...)时,调用期间this将不会引用Promise(它将是松散模式下的全局对象或严格模式下的undefinedall relies on this引用了承诺的构造函数(例如Promise)。

  

我知道bind会将方法绑定到传递的对象

让我们采用不同的方式:a = b.bind(c)返回一个新函数(a),在调用时,会调用b确保this设置为{{} 1}}在通话期间。结果称为绑定函数,因为它的c值绑定到它。

另见: