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ć.