Gnago Gnago - 17 days ago 6
HTML Question

Is it possible to compare a value with a parameter of a constructor?

function startMatch(){
Wbrook0 = new component(50, 50, "pieces/WhiteBrook.png", 0, 0, "piece", "Wbro0");
Wknight0 = new component(50, 50, "pieces/WhiteKnight.png", 50, 0, "piece", "Wknight0");
Wbishop0 = new component(50, 50, "pieces/WhiteBishop.png", 100, 0, "piece", "Wbis0");
Wqueen = new component(50, 50, "pieces/WhiteQueen.png", 150, 0, "piece", "Wque");
Wking = new component(50, 50, "pieces/WhiteKing.png", 200, 0, "piece", "Wking");
Wbishop1 = new component(50, 50, "pieces/WhiteBishop.png", 250, 0, "piece", "Wbis1");
Wknight1 = new component(50, 50, "pieces/WhiteKnight.png", 300, 0, "piece", "Wknight1");
Wbrook1 = new component(50, 50, "pieces/WhiteBrook.png", 350, 0, "piece", "Wbro1");
}

function helpme(){
console.log(component.length); //This will output 7, which is how many parameters component has
console.log(Bking.constructor.length); //Same here
}

function component(width, height, color, x, y, type, me){
//Mostly unrelated stuff, the stuff I left just defines the parameters
this.width = width;
this.height = height;
this.x = x;
this.y = y;
this.id = me;
}


Is it possible to find all of the current values of all one of component's parameters? (i.e. If I plug in "x" into the code that I'm asking about into console.log(), it would print 0, 50, 100, 150, 200, 300, and 350.

I know I could do console.log(Wbrook.x) for each one, but I've got 32 of these, and to do what I want, I'd also need to do y and id, and before I make such a mess with it, I figured I'd see if there's a simpler way.

Apologies if the description and title are vague, I don't have much experience with constructors yet. Thanks in advance.

Answer

I would save the components in an array when they are instantiated. You can then query that array and select the desired property.

_allComponents = [];

function startMatch() {
  Wbrook0 = new component(50, 50, "pieces/WhiteBrook.png", 0, 0, "piece", "Wbro0");
  Wknight0 = new component(50, 50, "pieces/WhiteKnight.png", 50, 0, "piece", "Wknight0");
  Wbishop0 = new component(50, 50, "pieces/WhiteBishop.png", 100, 0, "piece", "Wbis0");
  Wqueen = new component(50, 50, "pieces/WhiteQueen.png", 150, 0, "piece", "Wque");
  Wking = new component(50, 50, "pieces/WhiteKing.png", 200, 0, "piece", "Wking");
  Wbishop1 = new component(50, 50, "pieces/WhiteBishop.png", 250, 0, "piece", "Wbis1");
  Wknight1 = new component(50, 50, "pieces/WhiteKnight.png", 300, 0, "piece", "Wknight1");
  Wbrook1 = new component(50, 50, "pieces/WhiteBrook.png", 350, 0, "piece", "Wbro1");
}

function helpme() {
  console.log(component.length); //This will output 7, which is how many parameters component has
  console.log(Bking.constructor.length); //Same here
}

function component(width, height, color, x, y, type, me) { //Mostly unrelated stuff, the stuff I left just defines the parameters
  this.width = width;
  this.height = height;
  this.x = x;
  this.y = y;
  this.id = me;
  _allComponents.push(this);
}

function getPropertyOfComponents(components, propertyName) {
  var values = [];
  components.forEach(function(component) {
    values.push(component[propertyName]);
  });
  return values.join(",");
}

startMatch();
console.log(getPropertyOfComponents(_allComponents, 'x'));

Comments