为什么没有任何对象原型作为forEach回调工作?

时间:2015-01-14 10:14:28

标签: javascript prototype declarative-programming

而不是一个问题,我只是希望它是一个挑战,但还无法找到答案。

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

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应该从每个函数中获取第一个参数,一切似乎都很好。

2 个答案:

答案 0 :(得分:0)

foo.call()将调用foo中存储的函数。

即。 this内的call值为foo

传递给forEach的函数在没有显式上下文的情况下被调用,因此this的值将成为默认对象(浏览器中的window)。

window不是函数,因此错误。

您可以使用bind创建一个调用具有特定上下文的函数的新函数。

答案 1 :(得分:0)

试试这个,

x = ['a', '   b', '  c  ']
x.map(function(item) { return item.trim() })