Tìm định nghĩa hàm JavaScript trong Chrome


282

Công cụ dành cho nhà phát triển của Chrome hoạt động, nhưng một điều họ dường như không có (mà tôi có thể tìm thấy) là một cách để tìm định nghĩa của hàm JavaScript. Điều này sẽ rất tiện cho tôi vì tôi đang làm việc trên một trang web có nhiều tệp JS bên ngoài. Chắc chắn grep giải quyết điều này nhưng trong trình duyệt sẽ tốt hơn nhiều. Ý tôi là, trình duyệt phải biết điều này, vậy tại sao không phơi bày nó? Những gì tôi mong đợi là một cái gì đó như:

  • Chọn 'Kiểm tra phần tử' từ trang, đánh dấu dòng trong tab Thành phần
  • Nhấp chuột phải vào dòng và chọn 'Chuyển đến định nghĩa hàm'
  • Kịch bản đúng được tải trong tab ScScript và nó nhảy đến định nghĩa hàm

Trước hết, chức năng này có tồn tại và tôi chỉ thiếu nó?

Và nếu không, tôi đoán điều này sẽ đến từ WebKit, nhưng không thể tìm thấy bất cứ điều gì cho các yêu cầu tính năng của Công cụ dành cho nhà phát triển hoặc Bugzilla của WebKit .


3
Có một thanh tìm kiếm greps tệp hiện tại trong tab ScScript và bạn có thể xem qua nội dung của hàm bằng cách in nó. Nhưng tôi bây giờ tò mò nếu có một cách để thực hiện tìm kiếm tổng quát hơn như bạn muốn ...
hugomg

3
Với Công cụ dành cho nhà phát triển Google Chrome, tại "Nguồn" Chạm -> cửa sổ bên phải, bạn có khả năng đặt "Điểm dừng sự kiện".

Trong trường hợp của tôi, tôi đã có một biến được đặt thành một hàm chưa biết. Tôi đã thực hiện myvar.toString () và nó đã in: "function Object () {[mã gốc]}" đó là tất cả những gì tôi cần biết.
Đổ chuông

Câu trả lời:


366

Hãy nói rằng chúng tôi đang tìm kiếm chức năng có tên foo:

  1. (mở Chrome dev-tools),
  2. Windows: ctrl+ shift+ Fhoặc macOS: cmd+ optn+ F. Điều này mở ra một cửa sổ để tìm kiếm trên tất cả các tập lệnh.
  3. đánh dấu vào hộp kiểm "Biểu thức chính quy",
  4. tìm kiếm foo\s*=\s*function(tìm kiếm foo = functionvới bất kỳ số lượng khoảng trống giữa ba mã thông báo đó),
  5. nhấn vào một kết quả trả về.

Một biến thể cho định nghĩa hàm là function\s*foo\s*\(cho function foo(với bất kỳ số lượng khoảng trống giữa những ba thẻ.


8
Bây giờ đó là những gì tôi đang nói về! Tôi không có ý tưởng rằng khung thậm chí còn tồn tại - và bạn sẽ thế nào?
Ryan DuVal

22
cmd + tùy chọn + F trên OSX
Stiggler

2
Đây chỉ là một cách để xác định một chức năng có tên foo. Co nhung nguoi khac. Điều gì nếu chức năng của chúng tôi là ví dụ bar['foo']? (Không có câu trả lời hay cho câu hỏi đó, theo như tôi biết --- về cơ bản là "không viết mã phức tạp")
Steven Lu

1
Tôi không thể tìm thấy "định nghĩa hàm" bằng cách sử dụng câu trả lời đã chọn. Tôi đã tìm kiếm trên Google và không thể tìm thấy bất kỳ trợ giúp. (Sử dụng Chrome Phiên bản 41.0.2272.118 m)
Web_Developer

7
Và sau đó bạn không thể tìm thấy các khai báo hàm, các biểu thức hàm được tạo động và các hàm ẩn danh (không tên). Tôi muốn có một cái gì đó giống như Firefox: Nhấp vào tham chiếu chức năng trong bảng đồng hồ -> Chuyển đến tham chiếu chức năng.
Fagner Brack

77

Điều này đã hạ cánh trên Chrome vào ngày 2012-08-26 Không chắc chắn về phiên bản chính xác, tôi nhận thấy nó trong Chrome 24.

Một ảnh chụp màn hình đáng giá một triệu từ:

 Công cụ Chrome Dev> Bảng điều khiển> Hiển thị Định nghĩa Chức năng

Tôi đang kiểm tra một đối tượng với các phương thức trong Bảng điều khiển. Nhấp vào "Hiển thị định nghĩa chức năng" sẽ đưa tôi đến vị trí trong mã nguồn nơi chức năng được xác định. Hoặc tôi chỉ có thể di chuột qua function () {từ để xem thân hàm trong một chú giải công cụ. Bạn có thể dễ dàng kiểm tra toàn bộ chuỗi nguyên mẫu như thế này! CDT chắc chắn đá !!!

Hy vọng tất cả các bạn tìm thấy nó hữu ích!


1
Có một phím tắt hoặc một chức năng sẽ cho phép tìm kiếm theo một tham chiếu chức năng? như "> kiểm tra (document.body)". Bây giờ tôi phải d> tmp = {a: myFunc}; > tmp, theo sau là "Hiển thị định nghĩa chức năng"
Dennis C

16
Tôi nghĩ bạn có thể làm đượcdir(myFunc)
Dmitry Pashkevich

dir (myFunc) tốt hơn nhiều, nhưng vẫn cần hai lần nhấp và chuột
Dennis C

1
Oh, ý bạn là nếu bạn có thể làm điều đó hoàn toàn từ bàn phím? Một cái gì đó như thế findDefinition(myFunc)nào? AFAIK vẫn chưa tồn tại ...
Dmitry Pashkevich

Nếu bạn không có một đối tượng chứa hàm, bạn có thể tạo một đối tượng xung quanh nó và nó vẫn hoạt động. Ví dụ: trong loại bàn điều khiển : ({1:somefunction}), sau đó nhấp chuột phải vào chức năng bên trong đối tượng được in.
Người bảo vệ một

47

Bạn có thể in chức năng bằng cách đánh giá tên của nó trong bảng điều khiển, như vậy

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

điều này sẽ không hoạt động đối với các chức năng tích hợp, chúng sẽ chỉ hiển thị [native code]thay vì mã nguồn.

EDIT : điều này ngụ ý rằng chức năng đã được xác định trong phạm vi hiện tại.


1
Điều đó không hiệu quả với tôi (ngay cả w / hàm được xác định trong trang):> toggle_search ReferenceError: toggle_search không được xác định
Ryan DuVal 22/03/2016

Aah, xem chỉnh sửa của tôi. Otherwisse, sử dụng chức năng tìm kiếm sẽ giúp bạn. Chrome devtools không phải là IDE, nó là trình gỡ lỗi :)
joar

1
Điều này hoạt động để tìm định nghĩa hiện hoạt động của chức năng.
Patrick

1
Nó thực sự ngụ ý rằng chức năng đã được xác định trong phạm vi hiện tại .
Jonathan

1
@aroth Ít nhất trong Chrome 45, điều này hoạt động trở lại. Tôi biết rằng mọi thứ đã thay đổi ở đâu đó giữa khi điều này được đăng và bây giờ. Kết luận, nó dường như hoạt động trở lại.
tham gia

32

Cập nhật 2016 : trong Chrome Phiên bản 51.0.2704.103

Có một Go to memberphím tắt (được liệt kê trong settings > shortcut > Text Editor). Mở tệp chứa chức năng của bạn (trong sourcesbảng điều khiển của DevTools) và nhấn:

ctrl+ shift+O

hoặc trong OS X:

+ shift+O

Điều này cho phép liệt kê và tiếp cận các thành viên của tập tin hiện tại.


1
tốt, điều này dường như không phải là "đi đến định nghĩa" của một lệnh gọi hàm tùy ý, mà là "hiển thị cho bạn tất cả các tên hàm trong tệp hiện tại và cho phép bạn đi đến chúng" - cũng rất hữu ích.
Scott Weaver

Đây chính xác là những gì tôi đang tìm kiếm, một tính năng tương tự như firefox! Trong firefox, bạn có thể chỉ cần mở các công cụ dev, nhấn Ctrl + f và nó sẽ tìm kiếm chức năng JS trong tất cả các bảng (HTML / CSS / Javascript / vv.). Điều này thực hiện nó, không giống như các tính năng regex được đề cập trong các câu trả lời khác.
javaBean007

@Randy, trên phiên bản nào của chrome? HĐH nào? Tôi sử dụng Chrome Phiên bản 59.0.3071.115 trên OS X và nó hoạt động tốt.
arthur.sw

@ arthur.sw Xin lỗi, tôi không nhận ra bạn phải có nguồn để việc này hoạt động. Tôi hy vọng nó cũng hoạt động trong giao diện điều khiển.
Randy

Đối với tôi, menu chrome sẽ mở nếu tôi nhấn tổ hợp phím đó trong bảng điều khiển dev.
Đen

19

Một cách khác để điều hướng đến vị trí của định nghĩa hàm sẽ là ngắt trình gỡ lỗi ở một nơi nào đó bạn có thể truy cập hàm và nhập tên hàm đủ điều kiện trong bảng điều khiển. Điều này sẽ in định nghĩa hàm trong bảng điều khiển và đưa ra một liên kết mà khi nhấp vào sẽ mở vị trí tập lệnh nơi hàm được xác định.


17

Các trình duyệt khác nhau làm điều này khác nhau.

  1. Đầu tiên mở cửa sổ giao diện điều khiển bằng cách nhấp chuột phải vào trang và chọn "Kiểm tra phần tử" hoặc nhấn F12.

  2. Trong bảng điều khiển, nhập ...

    • Firefox

      functionName.toSource()
    • Trình duyệt Chrome

      functionName

hàm tôi đang tìm kiếm là stop () và nó được sử dụng như onmouseover = "this.stop ();" Khi tôi làm những gì bạn nói, nó sẽ trả về: stop () {[mã gốc]} Vậy phải làm gì bây giờ?
Tarik

functionName.toSource()cũng hoạt động trên các phiên bản chrome mới nhất.
Sourav Ghosh

1
@Tarik Xem tài liệu trực tuyến cho nội dung stop.
Vụ kiện của Quỹ Monica ngày

@QPaysTaxes Cảm ơn, bây giờ tôi hiểu rằng khi nó trả về: stop () {[mã gốc]} có mã gốc có nghĩa Nó không phải là một hàm riêng, nó là hàm nội bộ và tôi nên tìm tài liệu trực tuyến của hàm.
Tarik

6

trong bảng điều khiển Chrome:

debug(MyFunction)
MyFunction()

1
Tôi thích điều đó. Đáng chú ý: thực hiện undebug(MyFunction)để xóa điểm dừng một lần nữa (sau khi bạn tìm thấy phương thức thực hiện)
Andreas Dolk

5

Tôi tìm thấy cách nhanh nhất để xác định chức năng toàn cầu chỉ đơn giản là:

  1. Chọn tab Nguồn .
  2. Trong khung Watch bấm + và gõ cửa sổ
  3. Tài liệu tham khảo chức năng toàn cầu của bạn được liệt kê đầu tiên, theo thứ tự abc.
  4. Nhấp chuột phải vào chức năng bạn quan tâm.
  5. Trong menu bật lên chọn Hiển thị định nghĩa chức năng .
  6. Khung mã nguồn chuyển sang định nghĩa hàm đó.

1

Trong Google chrome, công cụ phần tử Kiểm tra, bạn có thể xem bất kỳ định nghĩa chức năng Javascript nào.

  1. Nhấp vào tab Nguồn. Sau đó chọn trang chỉ mục. Tìm kiếm chức năng.

nhập mô tả hình ảnh ở đây

  1. Chọn chức năng sau đó Nhấp chuột phải vào chức năng và chọn "Đánh giá văn bản đã chọn trong bảng điều khiển."

nhập mô tả hình ảnh ở đây



0

Tôi gặp vấn đề tương tự khi tìm nguồn gốc của phương thức. Tên đối tượng là myTreevà phương thức của nó là load. Tôi đặt một điểm dừng trên dòng mà phương thức được gọi. Bằng cách tải lại trang, việc thực thi dừng lại tại thời điểm đó. Sau đó, trên bảng điều khiển DevTools, tôi đã gõ đối tượng cùng với tên phương thức, tức là myTree.loadvà nhấn Enter. Định nghĩa của phương pháp đã được in trên bàn điều khiển:

nhập mô tả hình ảnh ở đây

Ngoài ra, bằng cách nhấp chuột phải vào định nghĩa, bạn có thể đi đến định nghĩa của nó trong mã nguồn:

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.