我知道bind
会将这个方法绑定到传递的对象上。但是,我在这里不理解的是,为什么我们要将类名传递给绑定?这个说法是什么意思:“all = Promise.all.bind(Promise)”?
我从一位专家那里得到的一个答案是,“这是为了使函数”独立“,这又是我不明白的。我可能完全愚蠢的不理解并对一个陈述完全愤怒,但是,有没有人可以解释这一点?
我知道bind
会将这个方法绑定到传递的对象上。但是,我在这里不理解的是,为什么我们要将类名传递给绑定?这个说法是什么意思:“all = Promise.all.bind(Promise)”?
我从一位专家那里得到的一个答案是,“这是为了使函数”独立“,这又是我不明白的。我可能完全愚蠢的不理解并对一个陈述完全愤怒,但是,有没有人可以解释这一点?
这不是“类名”,它是一个对象。 (具体而言,函数;函数在JavaScript对象甚至更具体地,一个构造功能。)
Promise.all(...)
查找该all
属性Promise
对象上,并与this
设置为Promise
调用all
。所以要做到这一点只需all(...)
,我们需要绑定该功能,以便this
总是Promise
即使我们称之为不同的方式。这就是all = Promise.all.bind(Promise)
所做的。
如果我们只是做了all = Promise.all
,那么当我们在通话过程中称为all(...)
,this
不会指Promise
(这将是松散模式全局对象或undefined
在严格模式下)。 all
relies onthis
引用承诺的构造函数(例如,Promise
)。
我知道
bind
将绑定方法,这被传递
对象让我们把一个不同的方式:a = b.bind(c)
返回一个新的功能(a
),调用它时,会调用b
确保呼叫期间,this
设置为c
。结果称为绑定函数,因为它的this
值绑定到它。
参见:
*(尔加如果这最后一段似乎有'了'和'B'混合起来,点击刷新!)* –
好吧,我想我现在明白了!所以......如果我们从它的父节点“提取”一个函数,我们应该确保我们将它的'this'绑定到一个适当的对象,这样我们就不会得到任何意想不到的结果。在这种情况下,我们将'this'函数'this'分配给它的实际父项,以便它自动化。 – Manu