Narzędzia deweloperskie Chrome są fajne, ale jedną rzeczą, której wydają się nie mieć (którą mogłem znaleźć), jest sposób na znalezienie definicji funkcji JavaScript. Byłoby to dla mnie bardzo przydatne, ponieważ pracuję na stronie zawierającej wiele zewnętrznych plików JS. Pewnie grep rozwiązuje to, ale w przeglądarce byłoby znacznie lepiej. Mam na myśli, że przeglądarka musi to wiedzieć, więc dlaczego tego nie ujawnić? Spodziewałem się czegoś takiego:
- Wybierz „Sprawdź element” na stronie, która podświetli linię na karcie Elementy
- Kliknij linię prawym przyciskiem myszy i wybierz „Przejdź do definicji funkcji”
- Prawidłowy skrypt jest ładowany do zakładki Skrypty i przechodzi do definicji funkcji
Po pierwsze, czy ta funkcja istnieje i po prostu jej brakuje?
A jeśli nie, to przypuszczam, że pochodzi to od WebKit, ale nie mogłem znaleźć niczego dla żądań funkcji Narzędzia programisty lub Bugzilli WebKit .
javascript
google-chrome-devtools
Ryan DuVal
źródło
źródło
Odpowiedzi:
Powiedzmy, że szukamy funkcji o nazwie
foo
:foo\s*=\s*function
(wyszukujefoo = function
z dowolną liczbą spacji między tymi trzema tokenami),Inny wariant dla definicji funkcji jest
function\s*foo\s*\(
zafunction foo(
z dowolną liczbą odstępów między tymi trzema żetonami.źródło
foo
. Są inni. Co jeśli nasza funkcja to np.bar['foo']
? (O ile wiem, nie ma dobrej odpowiedzi na to pytanie - jest to zasadniczo „nie pisz skomplikowanego kodu”)To wylądowało w Chrome w dniu 26.08.2012 Nie jestem pewien dokładnej wersji, zauważyłem to w Chrome 24.
Zrzut ekranu jest wart milion słów:
Sprawdzam obiekt metodami w konsoli. Kliknięcie „Pokaż definicję funkcji” prowadzi mnie do miejsca w kodzie źródłowym, w którym funkcja jest zdefiniowana. Lub mogę po prostu najechać kursorem na
function () {
słowo, aby zobaczyć treść funkcji w podpowiedzi. Możesz łatwo sprawdzić cały łańcuch prototypów w ten sposób! CDT zdecydowanie rockowy !!!Mam nadzieję, że wszystkim wam się przyda!
źródło
dir(myFunc)
findDefinition(myFunc)
? AFAIK, który jeszcze nie istnieje ...({1:somefunction})
a następnie kliknij prawym przyciskiem myszy funkcję wewnątrz drukowanego obiektu.Możesz wydrukować funkcję, oceniając jej nazwę w konsoli
to nie będzie działać w przypadku wbudowanych funkcji, będą one wyświetlane tylko
[native code]
zamiast kodu źródłowego.EDYCJA : oznacza to, że funkcja została zdefiniowana w bieżącym zakresie.
źródło
Aktualizacja 2016 : w wersji Chrome 51.0.2704.103
Istnieje
Go to member
skrót (wymieniony wsettings > shortcut > Text Editor
). Otwórz plik zawierający twoją funkcję (wsources
panelu DevTools) i naciśnij:lub w OS X:
Umożliwia to wyświetlenie listy i dotarcie do członków bieżącego pliku.
źródło
Innym sposobem na przejście do lokalizacji definicji funkcji byłoby włamanie się do debuggera, gdzie można uzyskać dostęp do funkcji i wprowadzić w konsoli pełną nazwę funkcji. Spowoduje to wydrukowanie definicji funkcji w konsoli i podanie łącza, które po kliknięciu otwiera lokalizację skryptu, w której funkcja jest zdefiniowana.
źródło
Różne przeglądarki robią to inaczej.
Najpierw otwórz okno konsoli, klikając prawym przyciskiem myszy stronę i wybierając „Sprawdź element” lub naciskając F12.
W konsoli wpisz ...
Firefox
Chrom
źródło
functionName.toSource()
działa również w najnowszych wersjach chrome.stop
.w konsoli Chrome:
źródło
undebug(MyFunction)
ponownie, aby usunąć punkt przerwania (po znalezieniu implementacji metody)Uważam, że najszybszym sposobem zlokalizowania funkcji globalnej jest po prostu:
źródło
W Google Chrome narzędzie Inspect element można wyświetlić dowolną definicję funkcji JavaScript.
źródło
Jeśli już debugujesz, możesz najechać kursorem na funkcję, a podpowiedź pozwoli ci przejść bezpośrednio do definicji funkcji:
Dalsza lektura :
źródło
Miałem podobny problem ze znalezieniem źródła metody obiektu. Nazwą obiektu była
myTree
i była to metodaload
. Umieściłem punkt przerwania w wierszu, który wywołano metodę. Po ponownym załadowaniu strony wykonanie zatrzymało się w tym momencie. Następnie na konsoli DevTools wpisałem obiekt wraz z nazwą metody, tj.myTree.load
I nacisnąłem Enter. Definicja metody została wydrukowana na konsoli:Ponadto, klikając prawym przyciskiem myszy definicję, możesz przejść do jej definicji w kodzie źródłowym:
źródło