javascript - Problème de chaîne de prototypes d'objet et de fonction
仅有的幸福2017-05-19 10:11:54
0
1
561
Ce qui précède est mon test dans le navigateur. Je suis confus, je n'arrive pas du tout à comprendre cette chaîne de prototype. Qui peut m'aider à expliquer
L'objet est une fonction, ne vous laissez pas tromper par son nom, alors remplissez d'abord le formulaire dans votre tête
function Object () {
...
}
Toute fonction (constructeur) a un prototype, qui est un prototype. Il n'y a rien de spécial à propos du prototype, c'est juste un objet.
Object.prototype génère "Object { ... }", ne vous laissez pas tromper par cette sortie et pensez que Object.prototype est lui-même. Le « Objet » dans la sortie signifie simplement que la valeur de Object.prototype « est un objet de type « Objet ».
Mais en même temps, parce que la fonction elle-même dans JS est aussi un objet, Object n'est pas seulement une fonction, mais aussi un objet. Tous les objets sont "construits" (initialisés) à partir d'un prototype.
Quand l'objet est-il construit en tant qu'objet ?
A : Lorsqu'il est défini, c'est :
function Object() {
...
}
À l'heure actuelle, le runtime JS construit la fonction "objet" (instance) d'Object basée sur function () { [Code natif] } comme prototype.
Qu'est-ce que cette fonction () { [Code natif] } ? C'est l'ancêtre de toutes les fonctions de JS.
Object.__proto__.__proto__ est le prototype de cette fonction ancêtre. Puisqu'il s'agit d'un ancêtre, comment peut-elle avoir un prototype ? N'oubliez pas que c'est l'ancêtre de la fonction, mais ce n'est pas l'ancêtre de "l'objet". L'ancêtre de l'objet est cet "Object {__defineGetter__: ...}".
Vous avez encore demandé, puisque les objets sont construits, alors les objets ancêtres devraient également être construits, n'est-ce pas ? L'objet ancêtre est l'origine de toutes choses. Il est défini par le concepteur du langage JS et est le point de départ du système conceptuel.
Mais j'ai vu
Object.prototype.constructor
function Object() { [native code] }
L'objet ancêtre n'est pas clairement construit ? Et il est construit à partir d'Object ?
C'est juste que le concepteur du langage JS a pointé le constructeur de l'objet ancêtre vers Object par souci de cohérence conceptuelle.
Quel était l'objet ancêtre avant ?
Object.prototype.__proto__
null
Tao donne naissance à un et donne naissance à deux. Le Tao est le néant.
L'objet est une fonction, ne vous laissez pas tromper par son nom, alors remplissez d'abord le formulaire dans votre tête
Toute fonction (constructeur) a un prototype, qui est un prototype. Il n'y a rien de spécial à propos du prototype, c'est juste un objet.
Object.prototype génère "Object { ... }", ne vous laissez pas tromper par cette sortie et pensez que Object.prototype est lui-même. Le « Objet » dans la sortie signifie simplement que la valeur de Object.prototype « est un objet de type « Objet ».
Mais en même temps, parce que la fonction elle-même dans JS est aussi un objet, Object n'est pas seulement une fonction, mais aussi un objet. Tous les objets sont "construits" (initialisés) à partir d'un prototype.
Quand l'objet est-il construit en tant qu'objet ?
A : Lorsqu'il est défini, c'est :
À l'heure actuelle, le runtime JS construit la fonction "objet" (instance) d'Object basée sur function () { [Code natif] } comme prototype.
Qu'est-ce que cette fonction () { [Code natif] } ? C'est l'ancêtre de toutes les fonctions de JS.
Object.__proto__.__proto__ est le prototype de cette fonction ancêtre. Puisqu'il s'agit d'un ancêtre, comment peut-elle avoir un prototype ? N'oubliez pas que c'est l'ancêtre de la fonction, mais ce n'est pas l'ancêtre de "l'objet". L'ancêtre de l'objet est cet "Object {__defineGetter__: ...}".
Vous avez encore demandé, puisque les objets sont construits, alors les objets ancêtres devraient également être construits, n'est-ce pas ? L'objet ancêtre est l'origine de toutes choses. Il est défini par le concepteur du langage JS et est le point de départ du système conceptuel.
Mais j'ai vu
L'objet ancêtre n'est pas clairement construit ? Et il est construit à partir d'Object ?
C'est juste que le concepteur du langage JS a pointé le constructeur de l'objet ancêtre vers Object par souci de cohérence conceptuelle.
Quel était l'objet ancêtre avant ?
Tao donne naissance à un et donne naissance à deux.
Le Tao est le néant.
itlr.cc