是否可以在没有匿名函数的情况下将成员函数用作回调
Is it possible to use member functions as callbacks without an anonymous function
如果我想将函数应用于单个对象,我可以这样做:
> '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','two','three'].map(String.toUpperCase)
[ 'ONE', 'TWO', 'THREE' ]
这些只是例子,我没有给出使用map
或toUpperCase
的具体解决方案,拜托了。我只想知道成员函数是否可以在没有匿名额外函数的情况下用作回调函数
map
调用您为数组中的每个项目传递给它的函数,将当前项目作为第一个参数传递。
像toUpperCase
这样的函数不接受任何参数(在你的例子中你传递了x
但它被忽略了)。他们期望他们操作的值是 this
.
所以,没有。您不能只传递一个期望 this
对 map
有意义的函数。
不是没有创建另一个函数,不是。无论哪种方式,您最终都会创建一个函数。
但它可以是可重复使用的:
// 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","two","three"].map(makeUpper));
如果我想将函数应用于单个对象,我可以这样做:
> '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','two','three'].map(String.toUpperCase)
[ 'ONE', 'TWO', 'THREE' ]
这些只是例子,我没有给出使用map
或toUpperCase
的具体解决方案,拜托了。我只想知道成员函数是否可以在没有匿名额外函数的情况下用作回调函数
map
调用您为数组中的每个项目传递给它的函数,将当前项目作为第一个参数传递。
像toUpperCase
这样的函数不接受任何参数(在你的例子中你传递了x
但它被忽略了)。他们期望他们操作的值是 this
.
所以,没有。您不能只传递一个期望 this
对 map
有意义的函数。
不是没有创建另一个函数,不是。无论哪种方式,您最终都会创建一个函数。
但它可以是可重复使用的:
// 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","two","three"].map(makeUpper));