Javascript新对象引用

时间:2009-04-24 20:46:01

标签: javascript

创建对象的新实例的正确语法是什么,而不是指向原始对象的指针?这是我的例子:

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

当我为任何oInputs[oTitle].element设置oTitle的值时,它会设置所有值var oInputs = { Qty: new oItem, Tare: new oItem, Rate: new oItem, Total: new oItem }; 。我知道javascript通过引用传递对象,所以我假设它是因为它们都指向同一个对象。我试过这个,但显然是错的。

{{1}}

提前致谢。

3 个答案:

答案 0 :(得分:9)

执行以下操作:

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

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

然后设置您的属性:

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

答案 1 :(得分:3)

这是创建构造函数的另一种方法:

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

现在,您不需要新的运算符用于新的Item实例。

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

答案 2 :(得分:2)

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