Object
là Eva và Function
là Adam, Adam ( Function
) sử dụng xương của mình ( Function.prototype
) để tạo ra Eve ( Object
). Vậy thì ai đã tạo ra Adam ( Function
)? - Nhà phát minh ngôn ngữ JavaScript :-).
Theo câu trả lời của utsaina, tôi muốn thêm thông tin hữu ích.
Điều đáng ngạc nhiên nhất đối với tôi là khám phá ra những Object.__proto__
điểm đó Function.prototype
, thay vì Object.prototype
, nhưng tôi chắc chắn rằng có một lý do chính đáng cho điều đó :-)
Nó không nên. Object.__proto__
KHÔNG nên chỉ vào Object.prototype
. Thay vào đó, ví dụ của Object
o
, o.__proto__
nên trỏ đến Object.prototype
.
(Hãy tha thứ cho tôi vì đã sử dụng các thuật ngữ class
và instance
trong JavaScript, nhưng bạn biết điều đó :-)
Tôi nghĩ rằng Object
chính lớp học là một ví dụ Function
, đó là lý do tại sao Object.__proto__ === Function.prototype
. Do đó: Object
là Eva và Function
là Adam, Adam ( Function
) sử dụng xương của mình ( Function.prototype
) để tạo ra Eve ( Object
).
Hơn nữa, ngay cả Function
bản thân lớp cũng là một thể hiện của Function
chính nó, đó Function.__proto__ === Function.prototype
cũng là lý do tại saoFunction === Function.constructor
Hơn nữa, lớp thông thường Cat
là một ví dụ của Function
, đó là Cat.__proto__ === Function.prototype
.
Lý do cho điều trên là, khi chúng ta tạo một lớp trong JavaScript, thực ra, chúng ta chỉ đang tạo một hàm, nên là một thể hiện của Function
. Object
và Function
chỉ đặc biệt, nhưng chúng vẫn là các lớp, trong khi Cat
là một lớp thông thường.
Là một yếu tố, trong công cụ JavaScript của Google Chrome, 4 điều sau đây:
Function.prototype
Function.__proto__
Object.__proto__
Cat.__proto__
Chúng đều ===
(hoàn toàn bằng nhau) với 3 cái còn lại và giá trị của chúng làfunction Empty() {}
> Function.prototype
function Empty() {}
> Function.__proto__
function Empty() {}
> Object.__proto__
function Empty() {}
> Cat.__proto__
function Empty() {}
> Function.prototype === Function.__proto__
true
> Function.__proto__ === Object.__proto__
true
> Object.__proto__ === Cat.__proto__
true
ĐỒNG Ý. Vậy thì ai tạo ra sự đặc biệt function Empty() {}
( Function.prototype
)? Hãy suy nghĩ về nó :-)