2012-10-17 32 views
10

Tôi đang sử dụng Chrome v22.0.1229.94 m, không phải là vấn đề, nhưng chỉ trong trường hợp :-)DevTools xác định tên của hàm tạo của đối tượng như thế nào?

Tính di động không quan tâm đến tôi. Miễn là nó hoạt động với Chrome (và Safari) tôi rất vui.

Tôi đã hai chức năng, foo và bar:

var foo = function() { 
    ... 
} 
function bar() { 
    ... 
} 

sau đó nếu tôi tạo các đối tượng sử dụng chúng:

f1 = new foo(); 
b1 = new bar(); 

Tôi có thể lấy tên của nhà xây dựng cho thanh, nhưng cũng không cho foo:

> f1.constructor.name ==> "" 
> b1.constructor.name ==> "bar" 

nhưng trong cả hai trường hợp, bảng điều khiển DevTools sẽ hiển thị tên "foo" và "b ar "khi tôi kiểm tra các biến số f1b1.

Làm thế nào để trích xuất các tênfoo cho f1 như DevTools có khả năng?

enter image description here

+0

Điều này thật thú vị. Nó giống như devtools tên là vô danh chức năng tùy ý. Xem điều này: 'var foo = function myfoo() {}; new foo(); ==> myfoo' – Mohsen

+0

@Mohsen cảm ơn bạn đã lấy màn hình và nhận xét hỗ trợ của mình. – CyberFonic

+0

Đây là một câu hỏi tuyệt vời, và tôi không thể tin rằng điều này là không thể để có được tên này từ chức năng bản thân mình ... Tôi cần nó: D Bất kỳ may mắn tìm một giải pháp ?? – Wilt

Trả lời

1

Trong trường hợp cho foo, bạn đang tạo ra một biểu chức năng. Điều đó có nghĩa là, bạn chỉ định một hàm ẩn danh cho một biến.

Bạn không thể giải quyết hàm name theo cách lập trình như vậy, trừ khi bạn đặt tên hàm và tạo "biểu thức hàm có tên".

var foo = function foo() { 
    ... 
} 
+1

Câu hỏi của ông là cách các công cụ phát triển hiển thị một đối tượng có tên 'foo' để trả về' new foo() '? – Mohsen

6

V8 có thể thực hiện suy luận tên chức năng ở giai đoạn phân tích cú pháp, hiển thị thông tin này thông qua API của nó. Bạn sẽ không thể trích xuất thông tin này bằng cách sử dụng các thuộc tính đối tượng bình thường.

+1

Tôi không có hại khi sử dụng API V8 (không cần tính di động). Bạn có thể chỉ cho tôi theo hướng của tài liệu API đó không. – CyberFonic

+1

Có thực sự không thể có được tên này? Không thể tin được... – Wilt

Các vấn đề liên quan