Objectlà Eva và Functionlà 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ữ classvà instancetrong JavaScript, nhưng bạn biết điều đó :-)
Tôi nghĩ rằng Objectchính lớp học là một ví dụ Function, đó là lý do tại sao Object.__proto__ === Function.prototype. Do đó: Objectlà Eva và Functionlà 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ả Functionbản thân lớp cũng là một thể hiện của Functionchính nó, đó Function.__proto__ === Function.prototypecũng là lý do tại saoFunction === Function.constructor
Hơn nữa, lớp thông thường Catlà 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. Objectvà Functionchỉ đặc biệt, nhưng chúng vẫn là các lớp, trong khi Catlà 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ó :-)