而不是一个问题,我只是希望它是一个挑战,但还无法找到答案。
例如,我们有一个字符串数组
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
应该从每个函数中获取第一个参数,一切似乎都很好。
答案 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() })