为什么任何对象原型都不用作 forEach 回调

Why doesn't any object prototype work as a forEach callback?

本文关键字:forEach 回调 任何 对象 原型 为什么      更新时间:2023-09-26
与其说是一个

问题,我只是希望它是一个挑战,但还没有找到答案。

例如,我们有一个字符串数组

x = ['a', '   b', '  c  ']

我想修剪所有元素。我尝试了applycall方法,但没有按预期工作:

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() })