2009-04-24 11 views
4

Was ist die richtige Syntax zum Erstellen einer neuen Instanz des Objekts im Gegensatz zu einem Zeiger auf das Original? Hier ist mein Beispiel:Javascript neue Objektreferenz

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

wenn ich den Wert von oInputs[oTitle].element für jeden oTitle setzen sie den Wert von ihnen setzt alle. Ich weiß, dass Javascript Objekte als Referenz übergibt, also gehe ich davon aus, dass sie alle auf dasselbe Objekt verweisen. Ich habe das versucht, aber es ist offensichtlich falsch.

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

Vielen Dank im Voraus.

Antwort

9

Sie wie folgt:

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

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

und setzen Sie Ihre Eigenschaften:

for (var oTitle in oInputs) { 
    oInputs[oTitle].element = ... 
+0

Können Sie mir ein Beispiel geben? Danke – Praesagus

+0

perfekt, danke. :) – Praesagus

2
function oItem() { 
this.element= null; 
this.colIndex= 0; 
} 
var oInputs = { Qty: new oItem(), Tare: new oItem(), Rate: new oItem(), Total: new oItem() }; 
+1

Schön, aber ich würde bei der Konvention von Großbuchstaben ersten Buchstaben bleiben, um einen Prototyp oder Objekt Konstruktor zu bezeichnen. – cgp

3

Dies ist ein weiterer Weg, um einen Konstruktor zu erstellen:

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

Jetzt Sie don Den neuen Operator für eine neue Instanz von Item benötigen Sie nicht.

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