2017-05-24 49 views
0

我有一個「產品」的對象與視對方這樣的價值觀:的JavaScript - 更新/重新初始化對象

function Product(object) { 
    this.object = object; 
    this.data = { 
    id: this.object.val(), 
    } 
} 

var product = new Product($('input[name="productId"]:checked')); 

而且......這是工作。不過,我想重新初始化輸入改變整個對象,因爲我他們有幾個在這裏:

<input type="radio" name="productId" value="ONE" checked="checked" /> 
<input type="radio" name="productId" value="TWO" /> 

我可以改變事件手動設置新的價值:

$(function() { 
    $('input[name="productId"]').change(function(e) { 
    e.preventDefault(); 
    product.object = $('input[name="productId"]:checked'); 
    }); 
}); 

但它唯一的變化'對象'的值,並不會影響其中的其他值。

我當然可以在變化事件上手動設置每個新值​​,但看起來不正確,是嗎?我不想每當我想更新時重複自己,我只是想重新生成該對象。

現在我有一個在Product對象中使用公共函數的解決方法,然後在change事件中調用它。

this.updateData = function() { 
    this.data.id = this.object.val(); 
} 

但同樣,它只是重複每一項聲明,它的將是就不僅僅是一個「身份證」將會出現更多的對象屬性相當混亂。

回答

1

是否要更改對象的每個屬性?如果是這樣的話,那麼爲什麼不創建新的對象來取代舊對象呢?

$(function() { 
    $('input[name="productId"]').change(function(e) { 
    e.preventDefault(); 
    product = new Product($('input[name="productId"]:checked')); 
    }); 
}); 

但是,如果你想保留對象出於某種原因,你可以做這樣的事情:

function Product(object) { 
    this.updateData = function(o) { 
    this.object = o; 
    if (!this.data) this.data = {}; 
    this.data.id = this.object.val(); 
    //etc... 
    } 
    this.updateData(object) 
} 
+0

其實,我想首先第一個解決方案..我只是把「變種產品「而不是」產品「。那麼,不知道爲什麼:-) 第二個解決方案將來也會有用。 謝謝! – ficus