Je ne comprends pas quelle est la différence essentielle entre les deux manières d’écrire suivantes ?
function Person() {
}
Person.prototype.age = function(n) {
return n;
}
var person = new Person();
person.age(9);
La méthode d'écriture ci-dessus utilise le prototype pour permettre à l'objet instancié d'appeler la fonction de la classe parent.
La méthode suivante ne réussit pas le prototype, mais son utilisation est exactement la même.
function Person() {
this.age = function(n) {
return n;
}
}
var person = new Person();
person.age(9);
Alors sur quels aspects les deux sont-ils comparables ? S'il vous plaît conseiller, merci!
Il y a une différence dans l'économie de mémoire
La première méthode, la définition de prototye, tous les descendants partagent une définition de méthode, qui n'occupe qu'un seul espace dans la mémoire. Quel que soit le nombre d'instances que vous créez, la méthode age de toutes les instances pointe vers cette adresse mémoire.
La deuxième méthode est définie dans le constructeur. Chaque fois qu'une instance est créée, la définition de la méthode age allouera un espace exclusif à l'instance. À mesure que davantage d’instances sont créées, la mémoire augmente proportionnellement.
En résumé, s'il s'agit d'une méthode courante, merci de la mettre dans le prototype.
La deuxième façon d'écrire est le modèle constructeur, qui est facile à utiliser, mais le principal problème de cette méthode est que chaque méthode doit être recréée sur chaque instance.
La première approche de modèle de prototype résout ce problème en permettant à toutes les instances d'objet de partager les propriétés et les méthodes qu'il contient.
Pour faire simple, les fonctions sont les mêmes, sauf que dans la plupart des cas les méthodes sont écrites dans le prototype et les propriétés sont écrites dans le constructeur, donc la première méthode est plus couramment utilisée