JeuWeb - Crée ton jeu par navigateur
Réflexion nocture : l'encaspulation en Javascript - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Réflexion nocture : l'encaspulation en Javascript (/showthread.php?tid=5980)

Pages : 1 2


RE: Réflexion nocture : l'encaspulation en Javascript - Maks - 18-02-2012

Problème à la recopie pour attribut en effet, autant pour moi

Du coup je me suis induit en erreur, c'est ce que code qui est valide :


var Foo = function() {

this.attribut1 = 0;
this.attribut2 = "texte";

var self = this; // conservation du contexte

return {
method1: function() { alert('method1 ok'); },
getAttribut1: function() { return self.attribut1; },
setAttribut1: function(value) { self.attribut1 = value; }
}
};

var bar = new Foo();

alert(bar.attribut1); // undefined

bar.method1(); // renvoie method1 ok
bar.setAttribut1(3); // met bar.attribut1 à 3
alert(bar.getAttribut1()); // renvoie bar.attribut1



RE: Réflexion nocture : l'encaspulation en Javascript - Maks - 27-02-2012

Je fais mumuse Confusediffle:
Syntaxe la plus rapide que j'ai pondu pour déclarer une classe. Sans le mot-clé new et le mot-clé function.


var Perso = Class({
attribut1: false,
attribut2: true,
method1: function() { alert('je suis la méthode 1'); },
method2: function() { alert('je suis la méthode 2'); }
});


function Class () {

if(!this instanceof arguments.callee)
return new Class(arguments);

for (var key in arguments[0]) {

if(typeof arguments[0][key] == "function")
Class.prototype[key] = arguments[0][key];
else {
this[key] = arguments[0][key];

(function(key) {

Class.prototype['get' + key.charAt(0).toUpperCase() + key.substring(1).toLowerCase()] = function() { return this[key]; };
Class.prototype['set' + key.charAt(0).toUpperCase() + key.substring(1).toLowerCase()] = function(value) { this[key] = value; };

})(key);
}
}

var self = this;

var _class = function() {

for (var key in self) {

this[key] = self[key];

}
};

_class.prototype = Class.prototype;

return new _class();

}


alert(Perso.getAttribut1()); // false
Perso.method1(); // je suis la méthode 1