Je suis en train d'essayer d'organiser mon code. J'ai plusieurs modules dans mon projet, que j'aimerais organiser. Le fait est que tout ce qui m'est venu à l'esprit ne fonctionne pas. Je pense actuellement quatre idées:Comment organiser mon code en 'modules'?
objet simple - n'est pas utile en raison de problèmes de la portée. Utiliser
this.a
fonctionnerait, maisthis
a une signification différente en fonction de qui l'a appelé donc ce n'est pas fiable. Par exemple, j'ai une fois affecté une fonction à une classeWebSocket
, mais tout à coupthis
fait référence à l'instanceWebSocket
lorsque la fonction a été appelée par un événementWebSocket
. Je pourrais utiliserbind(foo)
chaque fois que j'appelle la fonction, mais il doit y avoir une autre façon je suppose.var foo = { a: 3, s: function() { alert(a); // a doesn't exist in this scope alert(this.a); // 'this' isn't always foo alert(foo.a); // I would have to put 'foo.' before each variable // reference, but I'm sure that's not the way to do it } };
instance-
a
n'est pas défini. Encore une fois,this
n'est pas fiable.var foo = function() { this.a = 3; this.s = function() { alert(a); }; }; var foo_instance = new foo(); foo_instance.a = 4; foo_instance.s(); // Error: a is not defined
Fermeture par exemple - Ne retourne rien; il reste
undefined
.var foo = (function() { this.a = 3; this.s = function() { alert(a); }; })(); // foo === undefined
Fermeture avec getter/setter - fonctionne à merveille sur Chrome, mais IE ne supporte pas les getters/setters.
var foo = (function() { var a = 3; return { get a() { return a; }, set a(v) { a = v; }, s: function() { alert(a); // Doesn't work in IE as getters/setters are // not supported } }; })();
Comment puis-je organiser efficacement mes modules, afin que je puisse accéder aux propriétés en toute sécurité et de manière multi-navigateur?
Merci.
pour # 2, vous devez this.a alerter non seulement un –
Miesionczek @ Jason: Aurez 'this' il toujours se référer à l'instance de 'foo'? – pimvdb
à l'intérieur de la fonction, oui. utiliser 'ceci' en dehors d'une fonction fait référence à l'objet global. –