__proto__ est le prototype interne, prototype est le prototype du constructeur (le constructeur est en fait une fonction)
Le prototype du constructeur est un objet
Alors, qu'est-ce qu'un constructeur ?
Si vous souhaitez créer un objet, vous devez d'abord avoir un constructeur d'objet, tout comme en PHP. Si vous souhaitez créer un objet, vous devez d'abord avoir une classe
.
L'essence d'un constructeur est une fonction. La question suivante est : Comment créer un objet via ce constructeur ?
Réponse : nouveau
Le constructeur construit un objet.
1. Le __proto__ de tous les constructeurs/fonctions pointe vers Function.prototype, qui est une fonction vide (Fonction vide)
explique que Number et ainsi de suite sont tous des constructeurs, et ces constructeurs sont en fait un objet de Function. En d’autres termes, cela équivaut à var Number = new Function();
Il existe un total de 12 constructeurs/objets intégrés en JavaScript (JSON est nouvellement ajouté dans ES5). Voici 8 constructeurs accessibles. Le reste comme Global n'est pas accessible directement, Les arguments ne sont créés par le moteur JS que lorsque la fonction est appelée, Math, JSON existent sous forme d'objets, aucun nouveau n'est requis. Leur __proto__ est Object.prototype. Comme suit
Les "tous les constructeurs/fonctions" mentionnés ci-dessus incluent certainement des constructeurs personnalisés. Comme suit
Qu'est-ce que cela signifie ?
Tous les constructeurs proviennent de Function.prototype, même le constructeur racine Object et Function lui-même. Tous les constructeurs héritent des propriétés et méthodes de Function.prototype. Tels que la longueur, l'appel, l'application, la liaison (ES5).
Function.prototype est également le seul prototype dont le type XXX.prototype est "fonction". Le prototype des autres constructeurs est un objet. Comme suit
Oh, il a également été mentionné ci-dessus qu'il s'agissait d'une fonction vide, jetons un coup d'œil à alert(Function.prototype).
Nous savons que le __proto__ de tous les constructeurs (y compris ceux intégrés et personnalisés) sont Function.prototype, alors qui est le __proto__ de Function.prototype ?
Je pense que vous avez tous entendu dire que les fonctions en JavaScript sont également des citoyens de premier ordre, alors comment pouvez-vous le montrer ? Comme suit
Cela montre que tous les constructeurs sont également des objets JS ordinaires et que des attributs peuvent être ajoutés/supprimés au constructeur. En même temps, il hérite également de toutes les méthodes sur Object.prototype : toString, valueOf, hasOwnProperty, etc.
Qui est le __proto__ d'Object.prototype ?
Il a atteint le sommet et est nul.
Comprenez-vous la différence entre __proto__ et prototype en javascript ? Si vous avez des questions, veuillez laisser un message et discutons-en ensemble