Home > Dev > Javascript and enums

Javascript and enums

August 3rd, 2009

Ayant passé un temps fou à débugger une petite application javascript que j’ai développé ce soir, j’ai envie de partager. Ca pourrait être d’utilité un jour à quelquen ;-)

J’étais en train de faire des objets qui, graphiquement, représenteraient des carrés à l’écran. J’ai créé un type enume pour la taille et la position de mes “blobs” pour pouvoir faire des testes dessus, simplifiant le passage par le Dom pour rechercher ses valeurs. J’ai donc fait quelque chose comme suit:

var blobsize = {
width : 0,
height : 0
}
var blobpos = {
top: 0,
left: 0
}

function blob(name) {
this.name = name;
this.size = blobsize;
this.position = blobpos;

this.setSize = function(width, height) {
this.size.width = width;
this.size.height = height;
}

this.setPos = function(top, left) {
this.position.top = top;
this.position.left = left;
}

this.draw = function() {
//Ajoute un element DIV avec bind des events etc…
}
}

//….
function addBlob(name, height, width, top, left) {
var tblob = new blob(name);
tblob.setPos(top, left);
tblob.setSize(height, width);
tblob.draw();
aBlobs.push(tblob);
tblob = null;
}

addBlob(’blob1′, 50, 50, 0, 0);
addBlob(’blob2′, 70, 70, 0, 100);

Je me disais “chouette”, lorsque, en déplaçant mes éléments, j’ai découverts qu’ils avaient tous les même position dans l’enume “position” et les mêmes dimensions dans “size”. Le problème vient du fait qu’il va chercher le même endroit de blobsize et blobpos pour chaque objet. Comme s’il faisait une référence. En changeant ma déclaration à ce qui suit, mon problème fût résolu! :-)

function blob(name) {
this.name = name;
this.size = { width:0, height:0};
this.position = { top:0, left:0};
// etc…
}

PS: Il semblerait que ma balise code est toujours aussi pourrie :-)

admin Dev , ,

  1. No comments yet.
  1. No trackbacks yet.