Une Bévue a écrit :
SAM <stephanemoriaux.NoAdmin@wanadoo.fr.invalid> wrote:
mais qq me choque : dans mon cas j'ai besoin d'initialiser l'objet en
question (ie. déplacé la "tortue"/"fourmi" à ses coordonnées initiales.
dans la version actuelle en closure, je fais ça comme ça :
function Ant(...){
[...]
var that=this;
function init(){
that.ctx.moveTo(that.x,that.y);
that.penDown();
}
init();
}
l'intérêt est que je n'ai pas à faire un init sur une instance.
Rien compris, comment ce serait "un init sur une instance" ?
Mais pourquoi pas simplement ceci :
function Ant(...)
{
...
function init(that)
{
that.ctx.moveTo(that.x, that.y);
that.pendDown();
return that;
}
return init(this);
}
mais en passant à prototype, avec :
var Foo = function(){};
je fais comme d'hab ?
càd :
j'initialise les attributs de l'objet :
function UnObjet(attribut_1,...,attribut_n){
this.attribut_1=attribut_1;
...
this.attribut_n=attribut_n;
var that=this;
function init(){...}
init();
}
puis :
UnObjet.prototype.uneFonction=function(params){...; return this;};
Quoi ? quoi ? quoi ? Pourquoi continuer avec le that=this si tu veux prototyper tout ça ?
function UnObjet(attribut_1, ...)
{
this.attribut_1 = attribut_1;
...
return this.init();
}
UnObjet.prototype.init = function()
{
this.ctx.moveTo(this.x, this.y);
this.pendDown();
return this;
};
donc seules les functions sont "externalisées" par prototypes...
Pourquoi je comprends rien à ce que tu racontes ? :(
je pense que le "that" dans init() ne fabrique pas de cycle (?)
Ben si, et encore, sous condition que je comprenne ce que tu entends par "cycle".
Reprenons ton exemple d'origine :
function UnObjet(attribut_1,attribut_n)
{
this.attribut_1=attribut_1;
this.attribut_n=attribut_n;
var that=this;
function init()
{
that.doSomething();
}
init();
}
Dans le contexte "UnObjet",
"init" est une Variable (si si)
"that" est une Closure
Puis dans init()
"that" est une Outer variable
Donc si, le "cycle" dont tu parlais existe bel et bien.
j'ai bon, ou je n'ai rien compris au film ???
A priori c'est pas bon, mais je t'avoues je comprends pas la moitié de ce que tu dis ni de ce que tu veux faire. Donc peut être :D
--
laurent