Javascript 为什么';不要把图珀的案子交给地图工作

Javascript 为什么';不要把图珀的案子交给地图工作,javascript,Javascript,昨天我在看一个问题,海报上问如何转换数组内容的大小写。我知道我可以传递对函数的引用以映射如下: function appendText (el){ return el += ' - appended text'; } ['a','b'].map(appendText); //["a - appended text", "b - appended text"] 但是当我试着 array.map(String.toUpperCase); array.map(String.prototy

昨天我在看一个问题,海报上问如何转换数组内容的大小写。我知道我可以传递对函数的引用以映射如下:

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或未定义


这听起来像是方法没有通过元素
map
就我所知,它会通过。为什么这不起作用?

您没有将任何内容传递给
原型
/extension方法。只需使用arrow函数传入数组项的值

为了回答问题背后的逻辑,您不能传递无上下文(例如,no
this
)原型方法(即,从基本
字符串
类)
map
将按名称运行函数,值作为第一个参数(如
appendText(a)
所示)

函数追加文本(el){
返回el+='-追加文本'
}
变量数组=['a','b']
console.log(array.map(appendText))
log(array.map(a=>appendText(a)))

console.log(array.map(a=>a.toUpperCase())
appendText
需要一个参数,
toUpperCase
不像字符串那样是
this
,因此它确实从map中获取元素,但不是设计用来使用它的。它被用作
'stuff'.toUpperCase()
而不是
String.toUpperCase('stuff')
试试
array.map(s=>s.toUpperCase())
@hsfzxjy,它将大写一个值数组,但这不是问题所在。我解释了为什么它不起作用,回答了你的问题。我很确定之前有人问过这个问题。见@GillesC comment。您可以使用
bind()
显式设置
this
值,然后它就会工作:
array.map(String.prototype.toUpperCase.call.bind(String.prototype.toUpperCase))如果你要投反对票,请发表评论,因为我觉得这回答了正确的输出以及你不能通过
原型
方法的原因。
如果你要投反对票,请发表评论,因为我觉得这回答了你的问题
意味着是我投了你的反对票,但我没有。如果不是的话,很抱歉,我只是基于您在@hsfzxjy上面的评论。编辑我的评论以便更清楚。。。