Je lis ici (Douglas Crockford) utilisation de l'opérateur prototype pour ajouter des méthodes aux classes Javascript économise également de la mémoire .
Puis j'ai lu dans cet article de John Resig "L'instanciation d'une fonction avec un ensemble de propriétés prototypiques est très, très, rapide " Mais parle-t-il de l'utilisation d'un prototype de la manière habituelle, ou de l'exemple spécifique qu'il donne dans son article ?
Par exemple, la création de cet objet :
function Class1()
{
this.showMsg = function(string) { alert(string); }
}
var c = new Class1();
c.showMsg();
plus lent que la création de cet objet, alors ?
function Class1() {}
Class1.prototype.showMsg = function(string) { alert(string); }
var c = new Class1();
c.showMsg();
P.S.
Je sais que le prototype est utilisé pour créer l'héritage et l'objet singleton, etc. Mais cette question n'a rien à voir avec ces sujets.
EDIT : pour ceux que cela pourrait intéresser également comparaison des performances entre un objet JS et un objet statique JS peut lire cette réponse ci-dessous . Les objets statiques sont incontestablement plus rapides mais il est évident qu'ils ne peuvent être utilisés que lorsque vous n'avez pas besoin de plus d'une instance de l'objet.
3 votes
Personnaliser un objet en lui ajoutant des propriétés revient à traiter un cas particulier pour cet objet. Cela prend plus de mémoire et est plus lent, l'utilisation du prototype demande explicitement au "compilateur" de pointer sur la définition de la classe, en partageant le même espace mémoire. Renvoyer un objet explicite au lieu de le construire à partir d'une méthode peut également aider le compilateur à optimiser le code (même si ce n'est pas toujours possible). Plus d'informations ici à partir de la diapositive 7
0 votes
Duplication possible de Définir des méthodes par le biais d'un prototype ou les utiliser dans le constructeur - est-ce vraiment une différence de performance ?
0 votes
Javascript n'a pas de classes...
1 votes
@AndreasBergström :
Class1
n'est qu'un nom, pas un mot-clé.1 votes
@MarcoDemaio Je sais, ça me fait mal aux yeux quand je vois des gens parler de classes en JS.
0 votes
@Andreas Bergström : JavaScript supporte les classes dans ECMAScript 6.
0 votes
@FarazKelhini - Le
class
dans ES6 est une abstraction qui introduit une mauvaise direction dans le langage pour le faire ressembler davantage à un langage OO. Pour paraphraser le premier paragraphe des docs de Mozilla, il balaie toutes les bonnes parties internes sous le tapis afin que plus de gens soient confus sur la façon dont JavaScript fonctionne. - developer.mozilla.org/en-US/docs/Web/JavaScript/Référence/ .