是否可以在没有匿名函数的情况下将成员函数用作回调

问题描述

如果我想将一个函数应用于单个对象,我可以这样做:

> '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' ]

这些只是示例,我没有给我使用 maptoupperCase 的具体解决方案,请。我只是想知道成员函数是否可以用作回调函数而无需匿名额外函数

解决方法

不是没有创建另一个函数,不。无论哪种方式,您最终都会创建一个函数。

但它可以是可重复使用的:

// 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

所以,不。您不能只传递期望 thismap 有意义的函数。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...