2013-02-07 47 views
6

Tôi muốn tìm hiểu về cấu trúc cụ thể của ngôn ngữ "nguyên mẫu" của javascript. Và đây là mã mục đích học tập của tôi:Firebug hiển thị đệ quy vô hạn cho hàm tạo

var f = function() {}; 
f.ext = 1; 
f.prototype.pext = 2; 

Khi tôi gỡ lỗi mã này ngay bây giờ với con đom đóm, tôi nhận được như sau: enter image description here

đâu làm tổ vô hạn này đến từ đâu? Hãy bắt đầu từ đầu (OK = unterstood):

f (OK)
- ext (OK)
- nguyên mẫu (OK)
- pext (OK)
- constructor (Tôi đang mắc kẹt tại điểm này)

Trình tạo của ai là? Và tại sao chúng ta có tổ chức này?

+0

Tôi nghĩ đó là vì nguyên mẫu của một hàm ẩn danh là một hàm ẩn danh. Vì bạn đang thiết lập một thuộc tính trên mẫu thử nghiệm của hàm, nó đặt thuộc tính đó trên nguyên mẫu của hàm mà thiết lập một thuộc tính trên nguyên mẫu của hàm ... vv. Không chắc chắn mặc dù :) – Flauwekeul

Trả lời

5

Đơn giản chỉ vì f === f.prototype.constructor, chúng giống nhau và Firebug hiển thị chúng dưới dạng tham chiếu vòng tròn.

Giống như:

var a = {}, 
    b = a; 
a.b = b; 

Bạn sẽ thấy tài liệu tham khảo vô đây quá.

3

Khi bạn làm điều này

Foo = function() { 
    // Do something 
}; 

sau đó bạn sẽ có điều này

Foo.prototype.constructor == Foo 

như Foo là các nhà xây dựng cho Foo:

var foo = new Foo(); // <-- Foo is the constructor. 

tôi khuyên bạn nên đọc này: http://beej.us/blog/data/javascript-prototypes-inheritance/

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