Niedawno użyłem little utility library Johna Resiga, o nazwie inherit.js. Zwykle staram się zrozumieć główne części bibliotek, których używam, i po wielu drapaniach głowy w końcu zrozumiałem twarde fragmenty kodu (a mianowicie, jak mógł nazwać odpowiednią metodę super klasy).Weird regex in inherit.js (autor John Resig) - dlaczego, co i jak?
1% trochę nie rozumiem dotyczy regex
fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
- regex/xyz/jest testowany przed funkcji. Zarówno MSDN, jak i MDN określają, że
test
przyjmuje jako argument łańcuch. Brak wzmianki o funkcji, ale ponieważ nie ma błędów w konsoli, myślę, że musi lecieć, ale jak to działa? - Następnym terminalem WTF jest to, że treść funkcji to
xyz;
. Ta funkcja nie może zostać wykonana, ponieważ w przeciwnym razie powstałaby "ReferenceError: xyz is not defined
". Dobrze? Więc co to robi? - Jeśli wynik testu jest prawdziwy, to
fnTest
jest równe regex, który sprawdza_super
na granicy słowa, w przeciwnym razie regex pasuje do czegokolwiek. Podwójny WTF; jeszcze raz, jak i dlaczego.
Później jest powiązany fragment kodu, w którym używane jest wyrażenie regularne.
// Check if we're overwriting an existing function
prototype[name] = typeof prop[name] == "function" &&
typeof _super[name] == "function" && fnTest.test(prop[name])
? aFunctionThatCanCallSuper /* Lots of code */
: prop[name];
Trochę tu zastanawiam się, to jest fnTest.test(prop[name])
. Rozumiem wszystkie inne testy, które sprawdzają, czy właściwość istnieje, jest funkcją itp., Ale nie to, co robi test regex. Ktoś?
[Zrozumienie Johna Resig za 'Proste JavaScript Inheritance'] (http://blog.buymeasoda.com/ understanding-john-resigs-simple-javascript-i /) – Andreas
@Andreas: Wow, żałuję, że nie znalazłem tego wcześniej, po prostu musiałem to rozszyfrować, ale wydaje mi się, że moje wnioski są poprawne. – elclanrs
Nawet nie warta opublikowania mojej odpowiedzi, ten link wydaje się idealną odpowiedzią. Zgaduję, że gdybyś przerobił tę bibliotekę _today_, to sprawdzanie nie jest konieczne, biorąc pod uwagę, że nowoczesne przeglądarki będą serializować poprawnie. – elclanrs