为什么任何对象原型都不用作 forEach 回调
Why doesn't any object prototype work as a forEach callback?
与其说是一个
问题,我只是希望它是一个挑战,但还没有找到答案。
例如,我们有一个字符串数组
x = ['a', ' b', ' c ']
我想修剪所有元素。我尝试了apply
和call
方法,但没有按预期工作:
x.forEach(String.prototype.trim.call)
// Uncaught TypeError: undefined is not a function
x.forEach(String.prototype.trim.apply)
// Uncaught TypeError: Function.prototype.apply was called on undefined, which is a undefined and not a function
这是怎么回事? apply
/call
应该从每个函数中获取第一个参数,一切似乎都很好。
foo.call()
将调用存储在foo
中的函数。
即call
内部this
的值将foo
。
您传递给forEach
的函数在没有显式上下文的情况下被调用,因此 this
的值将是默认对象(在浏览器中window
)。
window
不是一个函数,所以它会出错。
可以使用 bind
创建一个新函数,该函数调用具有特定上下文的函数。
试试这个,
x = ['a', ' b', ' c ']
x.map(function(item) { return item.trim() })
相关文章:
- AngularJS:我可以跳过函数参数回调吗
- 要求未定义JS回调参数
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- 在foreach中加载所有项后,Knockoutjs组件回调
- 将参数传递给 Array.forEach 回调函数
- 为什么任何对象原型都不用作 forEach 回调
- 匿名回调函数抛出错误,使一个像forEach一样遍历数组
- array.forEach之后的回调函数
- 使用 setTimeout 调用一次 forEach 的回调函数即可完成
- JavaScript:替换 ForEach 和匿名函数中的回调
- knockout.js中带有afterRender回调的嵌套ForEach
- Nodejs-console.log作为forEach中的回调
- Angular.foreach异步回调不工作
- 从forEach回调中修改外部数组变量
- 回调函数的定义以及它如何适用于array.prototype.forEach/map/filter方法
- Javascript foreach循环回调到下一个元素
- 在forEach迭代数组后发送响应(使用回调?)
- 在forEach的另一个回调中引用同一对象
- Angular js 在多次 http 调用完成后回调 foreach
- Async.forEach 调用回调