Знайдіть визначення функції JavaScript у Chrome


282

Інструменти для розробників Chrome гойдаються, але одне, що, здається, не має (що я міг би знайти), це спосіб знайти визначення функції JavaScript. Це було б дуже зручно для мене, оскільки я працюю на сайті, який включає багато зовнішніх файлів JS. Звичайно, греп вирішує це, але в браузері було б набагато краще. Я маю на увазі, браузер повинен це знати, то чому б не розкрити його? Я очікував щось таке:

  • На сторінці виберіть "Перевірити елемент", на якому відображається рядок на вкладці "Елементи"
  • Клацніть рядок правою кнопкою миші та виберіть "Перейти до визначення функції"
  • Правильний скрипт завантажується на вкладку Сценарії та переходить до визначення функції

По-перше, чи існує ця функціональність, і я її просто відсутній?

Якщо це не так, я здогадуюсь, що це походило б із WebKit, але нічого не вдалося знайти для запитів на функції інструмента розробника або Bugzilla WebKit .


3
На вкладці Сценарії є панель пошуку, яка обробляє поточний файл, і ви можете зазирнути до вмісту функції, роздрукувавши її. Але мені зараз цікаво, чи є спосіб зробити більш загальний пошук, як вам хочеться ...
— hugomg

3
За допомогою Інструментів для розробників Google Chrome у вікні "Джерела" Торкніться -> праворуч, ви маєте можливість встановити "Точки перерви події".

У моєму випадку у мене була змінна установка на невідому функцію. Я зробив myvar.toString (), і він надрукував: "функція Object () {[рідний код]}", що все, що мені потрібно знати.
— Кільце

Відповіді:


366

Скажімо, ми шукаємо функцію з назвою foo:

  1. (відкрити розробники інструментів Chrome),
  2. Windows: ctrl+ shift+ Fабо macOS: cmd+ optn+ F. Це відкриває вікно для пошуку всіх сценаріїв.
  3. поставте прапорець "Регулярний вираз",
  4. пошук foo\s*=\s*function(шукає foo = functionбудь-яку кількість пробілів між цими трьома лексемами),
  5. натисніть на повернутий результат.

Інший варіант визначення функції - function\s*foo\s*\(для function foo(будь-якої кількості пробілів між цими трьома лексемами.


8
Тепер про це я говорю! Я не мав уявлення, що панель навіть існує - а як би ти?
— Ryan DuVal

22
cmd + опція + F на OSX
— Stiggler

2
Це лише один спосіб визначення функції з назвою foo. Є й інші. Що робити, якщо наша функція є, наприклад bar['foo']? (На це питання немає гарної відповіді, наскільки я знаю --- це, по суті, "не пишіть перекручений код")
— Стівен Лу

1
Не вдалося знайти "визначення функції" за допомогою обраної відповіді. Я шукав в Google і не зміг знайти жодної допомоги. (Використовуючи версію Chrome 41.0.2272.118 м)
— Web_Developer

7
І тоді ви не зможете знайти декларації функцій, динамічно генеровані вирази функцій та анонімні (безіменні) функції. Я б хотів щось подібне Firefox: Клацніть посилання на функцію на панелі годинника -> Перейти до посилання на функцію.
— Fagner Brack

77

Цей приземлився в Chrome в 2012-08-26. Не знаючи точної версії, я помітив це в Chrome 24.

Скріншот вартує мільйона слів:

 Інструменти Chrome Dev> Консоль> Показати визначення функції

Я оглядаю об’єкт методами в консолі. Клацнувши по кнопці "Показати визначення функції", відводить мене до місця у вихідному коді, де визначена функція. Або я можу просто навести курсор на function () {слово, щоб побачити функціональне тіло в підказці. Ви можете легко оглянути всю прототипну ланцюжок, як це! CDT напевно рок !!!

Сподіваюсь, вам всім це стане в нагоді!


1
Чи є ярлик або функція, яка дозволяє здійснювати пошук за посиланням функції? наприклад "> перевірити (document.body)". Поки що я повинен d> tmp = {a: myFunc}; > tmp, а потім "Показати визначення функції"
— Dennis C

16
Я думаю, що ти можеш зробитиdir(myFunc)
— Дмитро Пашкевич

dir (myFunc) набагато краще, але все ж потрібні два кліки та миша
— Dennis C

1
О, ти маєш на увазі, якщо ти можеш це зробити повністю з клавіатури? Щось схоже findDefinition(myFunc)? AFAIK, який ще не існує ...
— Дмитро Пашкевич

Якщо у вас немає об'єкта, що містить функцію, ви можете створити навколо нього об'єкт, який буде працювати. Напр. Типу консолі:, ({1:somefunction})потім клацніть правою кнопкою миші функцію всередині надрукованого об’єкта.
— Захисник один

47

Ви можете роздрукувати функцію, оцінивши її назву в консолі, як так

> unknownFunc
function unknownFunc(unknown) {
    alert('unknown seems to be ' + unknown);
}

це не буде працювати для вбудованих функцій, вони відображатимуться лише [native code]замість вихідного коду.

EDIT : це означає, що функція була визначена в поточному діапазоні.


1
Це не працює для мене (навіть w / функції, визначені на сторінці):> toggle_search ReferenceError: toggle_search не визначено
— Ryan DuVal

Аа, дивіться мою редакцію. Інше, використовуючи функцію пошуку, допоможе вам. Chrome devtools - це не IDE, це налагоджувач :)
— joar

1
Це працює для пошуку поточно активного визначення функції.
— Патрік

1
Це фактично означає, що функція була визначена в поточному діапазоні.
— Джонатан

1
@aroth Принаймні в Chrome 45, це знову працює. Я знаю, що все змінилося десь між ними, коли це було розміщено і зараз. Зрештою, це, здається, працює знову.
— неділя

32

Оновлення 2016 року : у версії Chrome 51.0.2704.103

Є Go to memberярлик (перелічено в settings > shortcut > Text Editor). Відкрийте файл, що містить вашу функцію (на sourcesпанелі DevTools) і натисніть:

ctrl+ shift+O

або в OS X:

⌘+ shift+O

Це дозволяє перелічити та отримати доступ до членів поточного файлу.


1
добре, що це, здається, робить, це не "перейти до визначення" довільного виклику функції, а "показати вам всі назви функцій у поточному файлі та відпустити їх до них" - що теж корисно.
— Скотт Вівер

Це саме те, що я шукав, особливість, схожа на firefox! У firefox ви можете просто відкрити інструменти розробки, натисніть Ctrl + f, і він буде шукати функцію JS на всіх панелях (HTML / CSS / Javascript / тощо). Це робить це, на відміну від функцій регулярного вираження, згаданих в інших відповідях.
— javaBean007

@Randy, на якій версії хрому? Яка ОС? Я використовую Chrome версії 59.0.3071.115 на OS X, і він працює чудово.
— arthur.sw

@ arthur.sw Вибачте, я не розумів, що вам потрібно бути в джерелах, щоб це працювало. Я очікував, що він буде працювати і в консолі.
— Ренді

Для мене відкриється хромоване меню, якщо натиснути цю комбінацію клавіш на консолі розробника.
— Чорний

19

Іншим способом навігації до місця визначення функції буде пробивання налагоджувача десь ви можете отримати доступ до функції та ввести повнофункціональне ім'я в консолі. Це надрукує визначення функції в консолі та дасть посилання, яке при натисканні відкриє місце скрипту, де визначена функція.


17

Різні браузери роблять це по-різному.

  1. Спочатку відкрийте вікно консолі, клацнувши правою кнопкою миші на сторінці та вибравши "Перевірити елемент", або натиснувши його F12.

  2. На консолі введіть ...

    • Firefox

      functionName.toSource()
    • Хром

      functionName

функція, яку я шукаю, - stop (), і вона використовується як onmouseover = "this.stop ();" коли я виконую те, що ви говорите, він повертається: stop () {[рідний код]} Що робити тепер?
— Тарік

functionName.toSource()також працює на останніх хромованих версіях.
— Sourav Ghosh

1
@Tarik Подивіться онлайн-документацію на вбудований stop.
— Позов по

@QPaysTaxes Спасибі, тепер я розумію, що коли він повертається: stop () {[рідний код]} там власний код означає, що це не приватна функція, це внутрішня функція, і я повинен шукати онлайн-документацію функції.
— Тарік


5

Я вважаю, що найшвидший спосіб знайти глобальну функцію - це просто:

  1. Виберіть вкладку " Джерела" .
  2. У області перегляду натисніть + та введіть вікно
  3. Ваші глобальні посилання на функції перераховані спочатку за алфавітом.
  4. Клацніть правою кнопкою миші функцію, яка вас цікавить.
  5. У спливаючому меню виберіть Показати визначення функції .
  6. Панель вихідного коду переходить на визначення цієї функції.

1

У інструменті Google Chrome, Інспектування елементів ви можете переглянути будь-яке визначення функції Javascript.

  1. Перейдіть на вкладку Джерела. Потім виберіть індексну сторінку. Пошук функції.

введіть тут опис зображення

  1. Виберіть функцію, а потім клацніть правою кнопкою миші функцію та виберіть "Оцінити вибраний текст у консолі".

введіть тут опис зображення



0

У мене була подібна проблема з пошуком джерела методу об'єкта. Назва об'єкта була myTreeі його метод load. Я ставлю точку розриву на лінії, що називається методом. Перезавантаживши сторінку, виконання зупинилося в цьому пункті. Потім на консолі DevTools я набрав об'єкт разом із назвою методу, тобто myTree.loadнатиснув Enter. Визначення методу було надруковано на консолі:

введіть тут опис зображення

Також, клацнувши правою кнопкою миші на визначення, ви можете перейти до його визначення у вихідному коді:

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.