2017-05-05 56 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

相关问题