Réflexion nocture : l'encaspulation en Javascript
#11
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 :

[code=javascript]
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
[/code]
Répondre
#12
Je fais mumuse 15
Syntaxe la plus rapide que j'ai pondu pour déclarer une classe. Sans le mot-clé new et le mot-clé function.

[code=javascript]
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'); }
});
[/code]

[code=javascript]
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();

}
[/code]

[code=javascript]
alert(Perso.getAttribut1()); // false
Perso.method1(); // je suis la méthode 1
[/code]
Répondre




Utilisateur(s) parcourant ce sujet : 1 visiteur(s)