Metody obiektowe przypisane do zmiennych lub argumentów funkcji zawodzą przy wywołaniu

Uczę się teraz javascript, wydaje mi się, że jest to piękny język funkcjonalny, to cudowne posunięcie z PHP, powinienem był to zrobić wcześniej. Chociaż nie mogę tego zrozumieć:

var v1 = (/[abc]/).test;
v1('a');

mówitest method called on incompatible undefined, Próbuję przechowywać metodę testową tego wyrażenia regularnego w zmiennej i wywołać ją później.

ale działa z moimi własnymi funkcjami:

function foo(){
    return 'I\'m foo';
}

var f = foo;
f(); // returns I'm foo

Powinien także działać na metodach, ponieważ i tak są funkcjami obiektu nadrzędnego, prawda?

Ostatecznie powodem, dla którego próbuję tego dokonać, jest możliwość napisania czegoś takiego:

var a = ['a', 'b', 'c'];
a.every( (/[abc]/).test );

sprawdzić każdy element tablicy przeciwko temu wyrażeniu regularnemu.

Dlaczego to nie działa? Czy jest to ograniczenie przekazywania funkcji wbudowanych? Czy po prostu robię coś złego?

PS: Jeśli teraz zmiażdżysz zęby i stłumisz coś o złych praktykach, przykręć dobre praktyki, po prostu gram. Ale chciałbym też o nich usłyszeć.

questionAnswers(5)

yourAnswerToTheQuestion