为什么不能将Array.prototype.find与String.prototype.startsWith一起用作过滤器?

时间:2018-09-13 10:46:15

标签: javascript arrays

这会引发错误:

['hello'].find('helloworld'.startsWith);

Uncaught TypeError: String.prototype.startsWith called on null or undefined
at startsWith (<anonymous>)
at Array.find (<anonymous>)
at <anonymous>:1:11

但是当包裹在箭头功能中时,它可以正常工作

['hello'].find(string => 'helloworld'.startsWith(string));

"hello"

这是为什么?

1 个答案:

答案 0 :(得分:3)

因为不仅需要函数,还需要绑定的对象。

这可以通过使用Array#find中的thisArg

来实现

console.log(['hello'].find(String.prototype.startsWith, 'helloworld'));

或通过将字符串绑定到函数。

console.log(['hello'].find(String.prototype.startsWith.bind('helloworld')));

// sloppy
console.log(['hello'].find(''.startsWith.bind('helloworld')));