Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

fonction constructeur d'objets: return this ou pas ?

1 réponse
Avatar
ast
Bonjour,

Je trouve des exemples de fonction constructeurs d'objet avec un "return this;"
à la fin

ici: http://fr.wikibooks.org/wiki/Programmation_JavaScript/Notation_JSON

function Article(nom, prix_unitaire, quantite)
{
this.nom = nom;
this.prix_unitaire = prix_unitaire;
this.quantite = quantite;
this.resume = function(){
return this.nom+" x "+this.quantite+" à "+this.prix_unitaire+
" l'unité coûte(nt) "+( this.quantite*this.prix_unitaire );
}
return this;
}
var article = new Article( "Livre", 21.99, 2);


et d'autres exemples sans return

là: http://b.kostrzewa.free.fr/javascript/td-objets/creation.html

function Rectangle(l,h) { this.largeur=l; this.hauteur=h; this.perim=perim; this.aire=aire;}

var R=new Rectangle(8,6);



Quelle difference ?

1 réponse

Avatar
Pascal Poncet
Le 25/02/2011 10:33, ast a écrit :
Bonjour,



Bonsoir,

function Article(nom, prix_unitaire, quantite)
{
this.nom = nom;
this.prix_unitaire = prix_unitaire;
this.quantite = quantite;
this.resume = function(){
return this.nom+" x "+this.quantite+" à "+this.prix_unitaire+
" l'unité coûte(nt) "+( this.quantite*this.prix_unitaire );
}
return this;
}
var article = new Article( "Livre", 21.99, 2);



Aucun intérêt, à mon avis, dans cet exemple.

Je connais deux styles d'écriture à la mode qui nécessitent de retourner
l'objet à la fin d'une fonction.

La première, la plus simple à appréhender, est l'écriture en cascade.

Supposons le code suivant :

<script>
function Article(nom, pu, qte) {
this.nom = nom;
this.pu = pu;
this.qte = qte;
}
Article.prototype.setQte = function(qte){
this.qte = qte;
return this;
}
Article.prototype.resume = function(){
var parts = [
"Nom : " + this.nom,
"P.U. : " + this.pu,
"Quantité : " + this.qte
];
console.log(parts.join(", ")); // Firebug ou équivalent
return this;
}
</script>

Cela nous permet maintenant d'écrire :

<script>
var article = new Article("Livre", 21.99, 2);
article.resume().setQte(3).resume();
</script>

Après, c'est une question de goût, on trouve ça plus lisible, ou pas,
que d'appeler ces méthodes sur différentes lignes d'instructions (perso,
j'aime moyen).


L'autre emploi possible se trouve dans le pattern "module" et, là, je
préfère renvoyer à un article approfondi (en anglais, désolé) :
http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth



--
Cordialement,
Pascal