我试图解决https://twitter.com/secoif/status/730207047892017153当我收到错误消息时我不明白。运行此代码时出现错误
const fns = [
function () {
console.log(1)
},
function () {
console.log(2)
},
function () {
console.log(3)
}
]
fns.map(Function.prototype.call.bind)
Chrome 告诉我“必须在函数上调用 Bind”,我不明白。下面的行应该是等效的,不会抛出相同的错误。
fns.map((x) => Function.prototype.call.bind(x))
最佳答案
要解决 JS 测验,您可以这样做:
for (var x in fns) fns[x]();
但是,我意识到这不是您要问的:)。
您的方法中有一些我不明白的地方:
1) 为什么使用.map()? Map 用于返回另一个数组,这是不需要的,那么为什么不使用 forEach() 呢?
2)我不确定你为什么使用bind。使用map()时,回调会传递3个参数:当前函数、函数在数组中的索引以及数组本身。当您查看bind() 的语法时,您会注意到bind 的第一个参数是“this”对象,后面是要在绑定(bind)到的函数中传递的参数。在这种情况下,“this”将被设置为当前函数,索引和数组将作为参数传递给函数。
3) 使用调用时绑定(bind)。 call() 将采用与 bind() 相同的参数,其中第一个参数是“this”,其余参数是要传递到被调用函数的参数。当您使用 .bind() 时,它将把“this”对象设置为函数,第一个参数将是索引。因此,从 .call() 的 Angular 来看,您将其设置为函数的“this”,并将索引作为第一个参数传递给 call(),即 call 的“this”,然后将整个数组作为函数的第一个参数。
长话短说,你的值(value)观完全困惑了,而且你把事情变得过于复杂了。
关于javascript - 无法在数组上映射绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37328135/