2015-07-29 12 views
6

Sự hiểu biết của tôi là Object.__proto__ là đối tượng nguyên mẫu 'cấp cao nhất' trong javascript. Tôi sẽ ngoại trừ __proto__ của nó là rỗng, nhưng trong Google Chrome (chưa thử các trình duyệt khác), nó không phải là. Tại sao vậy?Tại sao đối tượng .__ proto __.__ proto__ không null?

Sửa

Tôi biết các hình ảnh sau đây có lẽ là một tái băm của hình dưới đây, nhưng tôi đã làm cho nó bản thân mình để kiểm tra hiểu biết của tôi. Có gì sai với nó không? enter image description here

Trả lời

6

Object là một chức năng, đó là __proto__ là một chức năng rỗng function() {}. Đối tượng gốc là đối tượng trống {}, không phải Object. Vì vậy, khi bạn có một đối tượng như {foo:1, bar:1} mối quan hệ của nó trông như thế này:

enter image description here

+0

Tôi chủ yếu hiểu sơ đồ đó, nhưng tôi hơi bối rối là tại sao có hai thực thể có tên là "hàm/Hàm" và "đối tượng/đối tượng". Bạn có phiền không? – jrahhali

+0

Nevermind, tôi nghĩ tôi hiểu rồi. Thực thể trên cùng bên trái đại diện cho đối tượng Function và đối tượng bên phải nó đại diện cho một cá thể được tạo ra bằng Function, đúng không? – jrahhali

+0

Hình ảnh này cực kỳ hữu ích và làm phát sinh thêm yêu cầu. Cảm ơn bạn. – jrahhali

5

Tôi nghĩ bạn đang nhầm Object.__proto__ cho Object.prototype.

Object.prototype.__proto__ thực sự là không có giá trị, vì Object không mở rộng bất kỳ thứ gì. Tuy nhiên,

Object là một hàm. một thể hiện của Function.
Function kéo dài Object, nguyên mẫu của nó có thuộc tính __proto__.
Bạn do đó có thể đi đường vòng qua Object.__proto__.__proto__ đạt Object.prototype, trên thực tế:

Object.prototype === Object.__proto__.__proto__ // should yield true 
+0

Vâng, tôi đã gây nhầm lẫn đối tượng .__ proto__ với Object.prototype. Nói về một mối quan hệ khó hiểu. Cảm ơn. Tôi ước tôi có thể chấp nhận hai câu trả lời. – jrahhali

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