18-11-2007, 03:30 PM
Tiens toujours dans l'idée des objets anonymes, je te propose les syntaxes alternatives suivantes :
Quand tu utilises tu peux aussi bien utiliser (puisqu'il s'agit d'une propriété d'un objet, elle est accessible indifféremment en notation "tableau" ou "objet" je préfère utiliser le point car on y retrouve plus explicitement la notion d'objet).
Quand tu initialises un "tableau associatif" en remplissant ton objet anonyme champ par champ, tu peux aussi les spécifier tous d'un bloc, au lieu detu pourrais utiliser
Et au passage, on notera que ce n'est pas parce qu'un objet est anonyme qui n'a pas le droit d'avoir de méthode, une méthode étant un attribut comme un autre on peut imaginer ça :
et du coup au lieu d'avoir tu auras
Le gain n'est pas évident parce qu'on ne met qu'un pied dans le modèle objet Javascript, mais en mettant les deux pieds dedans tu transformerais ta fonction onload en simple et tout se ferait dans l'initialisation de l'objet
naholyr, introducteur sournois à la POO, même et surtout en Javascript
Quand tu utilises
Code :
clippingArray[bloc]['firstTime']
Code :
clippingArray[bloc].firstTime
Quand tu initialises un "tableau associatif" en remplissant ton objet anonyme champ par champ, tu peux aussi les spécifier tous d'un bloc, au lieu de
Code :
clippingArray[bloc] = {};
clippingArray[bloc]['firstTime'] = true;
clippingArray[bloc]['position'] = 0;
clippingArray[bloc]['increment'] = 1;
Code :
clippingArray[bloc] = {
firstTime: true,
position: 0,
increment: 1
};
Et au passage, on notera que ce n'est pas parce qu'un objet est anonyme qui n'a pas le droit d'avoir de méthode, une méthode étant un attribut comme un autre on peut imaginer ça :
Code :
clippingArray[bloc] = {
firstTime: true,
position: 0,
increment: 1,
clip: function() {
var element = document.getElementById(bloc); // Ici on peut utiliser "bloc" qui est défini dans la fonction parente, et en Javascript une fonction anonyme définie dans une autre utilise le scope de sa fonction parente
if (element) {
this.position = this.position + this.increment; // this est l'objet courant
element.style.backgroundPosition = this.position + 'px 50%';
}
}
};
et du coup au lieu d'avoir
Code :
setInterval("clipBloc('bloc1')", 80);
Code :
setInterval("clippingArray['bloc1'].clip()", 80);
Le gain n'est pas évident parce qu'on ne met qu'un pied dans le modèle objet Javascript, mais en mettant les deux pieds dedans tu transformerais ta fonction onload en simple
Code :
new clip('bloc1');
naholyr, introducteur sournois à la POO, même et surtout en Javascript
Ressources [PHP][MySQL][prototype.js]