javascript - 无法在数组上映射绑定(bind)

标签 javascript

我试图解决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/

相关文章:

javascript - ajax 响应字节大小

数字的javascript验证

javascript - 使用文件系统 api 检索所有目录

javascript - 将动态变量分配给样式加载器路径

javascript - 普通 JavaScript 版本的 jQuery .click

javascript - 检查 iframe 中是否存在 html 文本

javascript - Bootstrap 的 Tokenfield with Twitter Typeahead 在建议中显示对象而不是值

javascript - 使用for循环在html中包含多个脚本文件

javascript - 为什么这个函数返回未定义?

javascript - Backbone 中的 FileReader 范围问题