0

而不是一个问题,我只是想让它成为一个挑战,但还没有找到答案。

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

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应该从每个函数中获取他们的第一个参数,一切看起来都很好。

4

2 回答 2

0

foo.call()将调用存储在foo.

thisinside的值call将是foo

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

window不是函数,所以会出错。

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

于 2015-01-14T10:18:45.187 回答
0

尝试这个,

x = ['a', '   b', '  c  ']
x.map(function(item) { return item.trim() })
于 2015-01-14T10:22:32.160 回答