__proto__ est un prototype interne, et le prototype est un prototype de constructeur (le constructeur est en fait une fonction)
Le prototype du constructeur est un objet
Alors, qu'est-ce qu'un constructeur?
Pour créer un objet, vous devez d'abord avoir un constructeur d'objets, tout comme dans PHP. Pour 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 la fonction.prototype, qui est une fonction vide (fonction vide)
La copie de code est la suivante:
Nombre .__ proto__ === function.prototype
// vrai
Booléen .__ proto__ === function.prototype
// vrai
String .__ proto__ === function.prototype
// vrai
Objet .__ proto__ === function.prototype
// vrai
Fonction .__ proto__ === function.prototype
// vrai
Array .__ proto__ ===
Function.prototype
// vrai
Regexp .__ proto__ === function.prototype
// vrai
Erreur .__ proto__ ===
Function.prototype
// vrai
Date .__ proto__ ===
Function.prototype
// vrai
Cela montre que le nombre et d'autres constructeurs sont en fait des objets de fonction. C'est-à-dire qu'il équivaut à var numéro = new function ();
Il y a 12 constructeurs / objets intégrés dans JavaScript (JSON est nouvellement ajouté dans ES5), et voici 8 constructeurs accessibles. Le reste est que Global ne peut pas être accessible directement, les arguments ne sont créés que par le moteur JS lorsque les appels de fonction, les mathématiques et les JSON existent sous forme d'objet, sans neuf. Leur __proto__ est objet.prototype. comme suit
La copie de code est la suivante:
Math .__ proto__ === objet.prototype
// vrai
JSON .__ Proto__ === Object.prototype
// vrai
Les «tous les constructeurs / fonctions» mentionnés ci-dessus incluent certainement ceux personnalisés. comme suit
La copie de code est la suivante:
// Déclaration de fonction
fonction de fonction ()
{}
// Fonction Expression
var homme
=
fonction()
{}
console.log (personne .__ proto__ === function.prototype)
// vrai
console.log (man .__ proto__ ===
Function.prototype)
// vrai
Qu'est-ce que cela signifie?
Tous les constructeurs proviennent de la fonction.prototype et incluent même l'objet et la fonction du constructeur racine lui-même. Tous les constructeurs héritent des propriétés et des méthodes de fonction. ProTotype. Tels que la longueur, l'appel, l'application, la liaison (ES5).
Function.prototype est également le seul prototype avec le type de xxx.prototype comme "fonction". Les prototypes d'autres constructeurs sont tous des objets. comme suit
La copie de code est la suivante:
console.log (typeof function.prototype)
// fonction
console.log (typeof object.prototype)
// objet
console.log (typeof numéro.prototype)
// objet
console.log (typeof boolean.prototype)
// objet
console.log (typeof string.prototype)
// objet
console.log (typeof array.prototype)
// objet
console.log (typeof regexp.prototype)
// objet
console.log (typeof error.prototype)
// objet
console.log (typeof date.prototype)
// objet
console.log (typeof object.prototype)
// objet
Oh, et il est également mentionné ci-dessus qu'il s'agit d'une fonction vide, jetez-en un coup d'œil sous alerte (fonction.pototype).
Je sais que tous les constructeurs (y compris intégrés et personnalisés) sont function.prototype, alors qui est __proto__ de function.prototype?
Je crois que tout le monde a entendu dire que les fonctions en JavaScript sont également des citoyens de première classe, alors où peuvent-ils être reflétés? comme suit
La copie de code est la suivante:
console.log (function.prototype .__ proto__ ===
Object.prototype)
// vrai
Cela montre que tous les constructeurs sont également des objets JS ordinaires, et ils peuvent ajouter / supprimer des attributs, etc. au constructeur. Dans le même temps, il hérite également de toutes les méthodes sur objet.prototype: toString, valeur de Hasownproperty, etc.
Qui est __proto__ de l'objet.prototype?
La copie de code est la suivante:
Object.prototype .__ proto__ ===
nul //
vrai
Il a déjà atteint le sommet, pour Null.
Avez-vous une compréhension de la différence entre __proto__ et le prototype en JavaScript? Si vous avez des questions, laissez un message et laissez-nous en discuter ensemble