2017-08-15 37 views
0

我知道bind会将这个方法绑定到传递的对象上。但是,我在这里不理解的是,为什么我们要将类名传递给绑定?这个说法是什么意思:“all = Promise.all.bind(Promise)”​​?

我从一位专家那里得到的一个答案是,“这是为了使函数”独立“,这又是我不明白的。我可能完全愚蠢的不理解并对一个陈述完全愤怒,但是,有没有人可以解释这一点?

回答

4

这不是“类名”,它是一个对象。 (具体而言,函数;函数在JavaScript对象甚至更具体地,一个构造功能。)

Promise.all(...)查找该all属性Promise对象上,并与this设置为Promise调用all。所以要做到这一点只需all(...),我们需要绑定该功能,以便this总是Promise即使我们称之为不同的方式。这就是all = Promise.all.bind(Promise)所做的。

如果我们只是做了all = Promise.all,那么当我们在通话过程中称为all(...)this不会指Promise(这将是松散模式全局对象或undefined在严格模式下)。 allrelies onthis引用承诺的构造函数(例如,Promise)。

我知道bind将绑定方法,这被传递

对象让我们把一个不同的方式:a = b.bind(c)返回一个新的功能(a),调用它时,会调用b确保呼叫期间,this设置为c。结果称为绑定函数,因为它的this值绑定到它。

参见:

+0

*(尔加如果这最后一段似乎有'了'和'B'混合起来,点击刷新!)* –

+0

好吧,我想我现在明白了!所以......如果我们从它的父节点“提取”一个函数,我们应该确保我们将它的'this'绑定到一个适当的对象,这样我们就不会得到任何意想不到的结果。在这种情况下,我们将'this'函数'this'分配给它的实际父项,以便它自动化。 – Manu