80 likes | 183 Views
Javascript les spécificités du langage - Partie 2-. Le prototypage des fonctions. Le prototypage est en quelques sortes un système d’héritage, cependant, pas comme on peut le voir dans les langages objets. Une fois un objet défini, il est alors possible d’y ajouter des
E N D
Le prototypage des fonctions Le prototypage est en quelques sortes un système d’héritage, cependant, pas comme on peut le voir dans les langages objets. Une fois un objet défini, il est alors possible d’y ajouter des propriétés ou des méthodes à l’extérieur même de l’objet et toutes les instances (ou copies) de cet objet auront accès à ces nouveaux attributs ou méthodes.
Le prototypage des fonctions Vous pouvez ainsi très bien étendre un objet natif du langage comme String : String.prototype.positionCaractere = function(caractere) { var compteur = 0; for(var index=0;index<this.length;index++) { if(this.charAt(index)== caractere) compteur++; } return compteur; } var texte = "Hello"; //Va afficher 2 alert(texte. positionCaractere ('e'));
Le prototypage des fonctions Voyons maintenant la différence entre le prototypage et l’ajout de propriété à l’instance. functionMonObjet() { this.maPropriete = 10; } // Crée une première instance var a = new MonObjet(); // crée une deuxième instance var b = new MonObjet(); // Prototype MonObjet MonObjet.prototype.nouvellePropriete = 12;
Le prototypage des fonctions //Ajoute une nouvelle propriété à l'instance "a" a.nouvelAttribut = 8; // modifie une propriété de l'instance a // Affiche 12 alert(a.nouvellePropriete); // Affiche 8 alert(a.nouvelAttribut); // Affiche 12 alert(b.nouvellePropriete); // Affiche undefined alert(b.nouvelAttribut);
Le prototypage des fonctions Le prototypage ne peut que se faire sur un objet qui va être instancié et disponible que pour ces instances, de même l’ajout de méthode ne peut que se faire sur une instance et non sur une instance d’instance.
Le prototypage des fonctions var tab = [1,2,3]; Object.prototype.alert = function() { for(index in this) { alert(this[index]); } } // Affiche 1 // Affiche 2 // Affiche 3 // Affiche [Object] tab.alert();
Le prototypage des fonctions Il n’y a hélas pas de solution propre en Javascript 1.5, la seule manière de palier à ce problème est de tester que le type de la variable n’est pas une fonction. Dans des versions plus évoluées de Javascriptil est possible d’ajouter des fonctions non énumérables aux objets grâce à «defineProperty ».