Maison  >  Article  >  interface Web  >  Quelle est la propriété du prototype javascript ? et les trois étapes pour instancier un objet

Quelle est la propriété du prototype javascript ? et les trois étapes pour instancier un objet

伊谢尔伦
伊谢尔伦original
2017-07-20 15:42:451470parcourir

Toutes les fonctions JS ont un attribut prototype, qui fait référence à un objet, l'objet prototype, également appelé prototype. Cette fonction comprend des constructeurs et des fonctions ordinaires. Nous parlons davantage du prototype du constructeur, mais on ne peut nier que les fonctions ordinaires ont aussi des prototypes. Par exemple, des fonctions ordinaires :

function F(){ 
  alert(F.prototype instanceof Object) //true; 
}

Constructeur, c'est-à-dire construire des objets. Tout d’abord, comprenons le processus d’instanciation d’un objet via le constructeur.

function A(x){ 
  this.x=x; 
} 
var obj=new A(1);

Il y a trois étapes pour instancier l'objet obj :
1. Créez l'objet obj : obj=new Object(); >2. Le __proto__ interne d'obj pointe vers le prototype de la fonction A qui l'a construit. En même temps, obj.constructor===A.prototype.constructor (cela est toujours vrai, même si A.prototype ne pointe plus vers le __proto__ interne de obj. original Un prototype, c'est-à-dire : L'attribut constructeur de l'objet instance de la classe pointe toujours vers le prototype.constructor du "constructeur"), de sorte que obj.constructor.prototype pointe vers A.prototype (obj.constructor. prototype===A.prototype, lorsque A.prototype change n'est pas vrai, comme nous le verrons ci-dessous). obj.constructor.prototype et le _proto_ interne sont deux choses différentes. _proto_ est utilisé lors de l'instanciation d'un objet. Obj n'a pas d'attribut de prototype, mais il a un __proto__ interne. Vous pouvez utiliser __proto__ pour obtenir les attributs de prototype sur la chaîne de prototypes. . et les méthodes prototypes, FireFox expose __proto__, qui peut être alerté dans FireFox (obj.__proto__) ;
3 Utilisez obj comme ceci pour appeler le constructeur A pour définir les membres (c'est-à-dire les propriétés de l'objet et les méthodes de l'objet) et initialisé. .

Lorsque ces trois étapes sont terminées, l'objet obj n'a aucun lien avec le constructeur A. À ce stade, même si le constructeur A ajoute des membres, cela n'affectera plus l'objet obj instancié. À ce stade, l'objet obj a l'attribut x et tous les membres de l'objet prototype du constructeur A. Bien entendu, l'objet prototype n'a aucun membre pour le moment.

L'objet prototype est initialement vide, c'est-à-dire qu'il n'a pas de membre (c'est-à-dire les propriétés du prototype et les méthodes du prototype). Vous pouvez vérifier le nombre de membres d’un objet prototype en utilisant la méthode suivante.


Cependant, une fois les attributs du prototype ou les méthodes du prototype définis, tous les objets instanciés via le constructeur héritent de ces attributs du prototype et des méthodes du prototype, ce qui se fait via la _proto _Chain interne.

var num=0; 
for(o in A.prototype) { 
  alert(o);//alert出原型属性名字 
  num++; 
} 
alert("member: " + num);//alert出原型所有成员个数。
Ensuite, tous les objets de A ont une méthode say. La méthode say de cet objet prototype est la seule copie partagée par tout le monde, au lieu que chaque objet ait une copie de la méthode say.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn