我通常只是想在輸入時更新一個值,但我遇到了一個極端怪異的行為,我無法真正解釋也無法解決。
updatePriceAndDuration(amount: number) {
if(amount < 1) amount = 1;
this.activeViewElement.elementTime = this.funcList[this.clickedObject].elementTime * amount;
如果(this.activeViewElement.costResources[901]) {
this.activeViewElement.costResources[901] = this.funcList[this.clickedObject].costResources[901] * amount;
}
if(this.activeViewElement.costResources[902]) {
this.activeViewElement.costResources[902] = this.funcList[this.clickedObject].costResources[902] * amount;
}
if(this.activeViewElement.costResources[903]) {
this.activeViewElement.costResources[903] = this.funcList[this.clickedObject].costResources[903] * amount;
}
}
這就是更新函式,問題是包含基本值的變數funcList也會被更新,但我真的不明白為什么。
因此,舉例來說。第一個funcList元素的costResources.903的值是2.000,但在第一個條目之后(例如2的數量),它變成了4.000,以此類推,計算當然會出錯。我是不是沒有更新activeViewElement的變數而沒有更新funcList的變數?我很困惑,因為我在幾年的編碼程序中真的沒有遇到過這樣的情況。
uj5u.com熱心網友回復:
看起來在你的代碼中,this.activeViewElement和this.funcList是通過參考系結的。最簡單的檢查方法是在this.funcList的值被分配給this.activeViewElement之前創建它的深度拷貝。如果它能解決這個問題,那就意味著你的參考是有邊界的,如果不看代碼的其他部分就很難說,但這是我的猜測。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/330235.html
標籤:
