昨天我正在看一个问题,其中海报询问如何转换数组内容的大小写。我知道我可以将一个函数的引用传递给map:
function appendText (el){
return el += ' - appended text';
}
['a','b'].map(appendText); //["a - appended text", "b - appended text"]
但是当我尝试
时array.map(String.toUpperCase);
array.map(String.prototype.toUpperCase);
我收到错误
未捕获的TypeError:String.prototype.toUpperCase在null或undefined上调用
这听起来好像方法没有通过元素map
,据我所知,它会传递。为什么这不起作用?
答案 0 :(得分:1)
您没有向prototype
/ extension方法传递任何内容。只需使用箭头函数传递数组项的值。
要回答问题背后的逻辑,您根本无法传递无上下文(例如,无this
)原型方法(即来自基础String
类)。 map
将按名称运行该函数,并将值作为第一个参数(如appendText(a)
所示)
function appendText (el){
return el += ' - appended text'
}
var array = ['a','b']
console.log(array.map(appendText))
console.log(array.map(a => appendText(a)))
console.log(array.map(a => a.toUpperCase()))