Objectest Eve, et Functionest Adam, Adam ( Function) utilise son os ( Function.prototype) pour créer Eve ( Object). Alors, qui a créé Adam ( Function)? - L'inventeur du langage JavaScript :-).
Selon la réponse de utsaina, je souhaite ajouter des informations plus utiles.
La chose la plus surprenante pour moi a été de découvrir que cela Object.__proto__
indique Function.prototypeplutôt que Object.prototype, mais je suis sûr qu'il y a une bonne raison à cela :-)
CA ne devrait pas être. Object.__proto__ne doit PAS pointer vers Object.prototype. Au lieu de cela, l'instance de Object o, o.__proto__doit pointer vers Object.prototype.
(Pardonnez-moi d'utiliser les termes classet instanceen JavaScript, mais vous le savez :-)
Je pense que la classe Objectelle-même est une instance de Function, c'est pourquoi Object.__proto__ === Function.prototype. Par conséquent: Objectest Eve, et Functionest Adam, Adam ( Function) utilise son os ( Function.prototype) pour créer Eve ( Object).
De plus, même la classe Functionelle-même est une instance d' Functionelle-même, c'est-à-direFunction.__proto__ === Function.prototype -dire aussi pourquoiFunction === Function.constructor
De plus, la classe régulière Catest une instance de Function, c'est-à-dire Cat.__proto__ === Function.prototype.
La raison de ce qui précède est que lorsque nous créons une classe en JavaScript, en fait, nous créons simplement une fonction, qui devrait être une instance de Function. Objectet Functionsont juste spéciaux, mais ce sont toujours des classes, alors que Catc'est une classe régulière.
En tant que facteur, dans le moteur JavaScript de Google Chrome, les 4 suivants:
Function.prototype
Function.__proto__
Object.__proto__
Cat.__proto__
Ils sont tous ===(absolument égaux) aux 3 autres, et leur valeur estfunction 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
D'ACCORD. Alors, qui crée le spécial function Empty() {}( Function.prototype)? Pensez-y :-)