问题描述
> 'mystr'.toupperCase()
'MYSTR'
但是如果我想对一个数组做同样的事情,使用 map
(例如),我必须这样做:
> ['one','two','three'].map((x)=>x.toupperCase(x))
[ 'ONE','TWO','THREE' ]
有没有办法在没有点符号的情况下使用这个函数?例如
// THIS DOESN'T WORK,BUT I WANT TO ACHIEVE SOMETHING LIKE THIS
> String.toupperCase('mystr')
'MYSTR'
> ['one','three'].map(String.toupperCase)
[ 'ONE','THREE' ]
这些只是示例,我没有给我使用 map
或 toupperCase
的具体解决方案,请。我只是想知道成员函数是否可以用作回调函数而无需匿名额外函数
解决方法
不是没有创建另一个函数,不。无论哪种方式,您最终都会创建一个函数。
但它可以是可重复使用的:
// Reusable function
const makeUpper = str => str.toUpperCase();
// Using it
console.log(["one","two","three"].map(makeUpper));
您也可以使用 bind
创建函数,但阅读起来非常复杂:
// Reusable function
const makeUpper = Function.prototype.call.bind(String.prototype.toUpperCase);
// Using it
console.log(["one","three"].map(makeUpper));
map
调用您为数组中的每个项目传递它的函数,将当前项目作为第一个参数传递。
像 toUpperCase
这样的函数不接受任何参数(在您的示例中,您传递 x
但它被忽略)。他们期望他们操作的价值是 this
。
所以,不。您不能只传递期望 this
对 map
有意义的函数。