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 iffle:
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
|