2017-05-05 67 views
0

我很難從JavaScript中的對象創建新實例。嘗試閱讀一些答案,但仍然沒有運氣。如何在javascript中創建對象的新實例

var general_obj = { 
    title : '', 
    count : 0, 
    details : [], 
    status : 'OK' 
} 

function processData(input){ 
    var result = Object.create(general_obj); 

    return result; 
} 

我想從general_obj創建新的實例。我期待的結果將具有相同的結構general_obj,因此在我的情況下,返回成爲唯一的,而不是

{} 

{ 
    title : '', 
    count : 0, 
    details : [], 
    status : 'OK' 
} 

我怎樣才能實現呢?

+0

@Tushar editted。謝謝 – Gerry

+0

您的代碼有效。只是繼承的屬性沒有被記錄。嘗試'console.log(result.count)' - 它是'0'。 – Bergi

+0

editted更具體..對不完整的代碼 – Gerry

回答

-1
var general_obj = { 
    title : '', 
    count : 0, 
    details : [], 
    status : 'OK' 
} 

function processData(input){ 
    var result= (JSON.parse(JSON.stringify(general_obj))); 

    result.title = 'two'; 
    result.count = 10; 
    result.details.push({ 
     "in-hand": 4, 
     "warehouse": 6 
    }); 
} 

使用JSON可以複製你的對象......

+0

請注意,如果對象具有方法,則這不起作用。或循環引用。 – nnnnnn

+0

我知道,但在這種情況下,可以通過一個簡單的方法來處理 –

+0

感謝您的支持,但我不明白。如何進行串聯和對象並再次解析它成爲一個克隆? – Gerry

2

您可能想要使用Object.assign({}, general_obj)來創建一個新對象,但所有字段都從general_obj複製而來。

請記住,這是一個淺層副本,並且新實例和舊實例都將通過details字段指向相同的數組。


Object.create功能允許您指定一個原型爲創建對象,這將導致similarish行爲,你想要什麼功能,會導致你看到你觀察到的結果。

+0

是的,我確實嘗試過這個分配,但是細節[]不斷增加。我認爲是因爲「指向同一陣列」,因爲你提到過。謝謝 ! – Gerry

0

嘗試,而不是執行以下操作:

function general_obj(title, count, details, status) { 
    this.title = title; 
    this.count = count; 
    this.details = details; 
    this.status = status; 
} 

然後用實例:

var result = new general_obj("", 0, [], "OK"); 
+0

好的,你將如何創建基於第一個實例的另一個實例? – nnnnnn

+0

這是預期從OP ?? – Sandman

+0

「我想從general_obj創建新實例*。我期待結果與general_obj具有相同的結構......」 – nnnnnn

相關問題