Как частично применить `RegExp.test` к строке? - PullRequest
0 голосов
/ 17 февраля 2020

Почему это не работает:

var func = /o/.test;
func("hello");
// VM165:1 Uncaught TypeError: Method RegExp.prototype.test called on incompatible receiver undefined
//     at test (<anonymous>)
//     at <anonymous>:1:1
// (anonymous) @ VM165:1

Но это работает:

/o/.test("hello");
// true

Ответы [ 2 ]

2 голосов
/ 17 февраля 2020

Когда вы берете метод из объекта и присваиваете его переменной, вам необходимо предоставить привязку для this, потому что контекст (объект) не передается вместе с методом.

var func = /o/.test.bind(/o/);
console.log( func("hello") );
0 голосов
/ 17 февраля 2020

РЕДАКТИРОВАТЬ

Использовать call или bind Метод.

// Call Approach
    var func = /o/.test;
    func.call(/o/, "hello")

//Bind Approach
    var func = /o/.test.bind(/o/);
    func("hello");
...