tags:

views:

668

answers:

3

Hi, what is the correct syntax to create a new instance of the object as opposed to a pointer to the original? Here is my example:

var oItem = { element: null, colIndex: 0 };
var oInputs = { Qty: oItem, Tare: oItem, Rate: oItem, Total: oItem };
for (var oTitle in oInputs) {
    oInputs[oTitle].element = ...

when I set the value of oInputs[oTitle].element for any oTitle it sets the value of them all. I know that javascript passes objects by reference, so I am assuming it's because they are all referring to the same object. I tried this but it is obviously wrong.

var oInputs = { Qty: new oItem, Tare: new oItem, Rate: new oItem, Total: new oItem };

Thanks in advance.

+6  A: 

Do the following:

function OItem() {
  this.colIndex = 0;
}

var oInputs = { Qty: new OItem(), Tare: new OItem(), Rate: new OItem(), Total: new OItem() };

and then set your properties:

for (var oTitle in oInputs) {
    oInputs[oTitle].element = ...
altCognito
Can you give me an example? Thanks
Praesagus
perfect, thanks. :)
Praesagus
+2  A: 
function oItem() { 
this.element= null; 
this.colIndex= 0; 
}
var oInputs = { Qty: new oItem(), Tare: new oItem(), Rate: new oItem(), Total: new oItem() };
Daniel Moura
Nice, but I'd stick with the convention of uppercase first letter to signify a prototype or object constructor.
altCognito
+1  A: 

This is another way to create a constructor:

function Item(element,colIndex){
   if (this instanceof Item){
       this.element = element || null;
       this.colIndex = colIndex || 0;
   } else {
       return new Item(element,colIndex);
   }
}

Now you don't need the new operator for a new instance of Item.

var oInputs = { Qty: Item(), 
                Tare: Item(), 
                Rate: Item(), 
                Total: Item() };
KooiInc