Почему это не работает:
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
Когда вы берете метод из объекта и присваиваете его переменной, вам необходимо предоставить привязку для this, потому что контекст (объект) не передается вместе с методом.
this
var func = /o/.test.bind(/o/); console.log( func("hello") );
РЕДАКТИРОВАТЬ
Использовать call или bind Метод.
call
bind
// Call Approach var func = /o/.test; func.call(/o/, "hello") //Bind Approach var func = /o/.test.bind(/o/); func("hello");