如何在javascript中创建对象的新实例

如何在javascript中创建对象的新实例,javascript,object,Javascript,Object,我很难从javascript中的对象创建新实例。 试着读一些答案,但仍然没有运气 var general_obj = { title : '', count : 0, details : [], status : 'OK' } function processData(input){ var result = Object.create(general_obj); return result; } 我想从general_obj创建新实例。我希

我很难从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'
}

如何实现它?

您可能希望使用
对象。分配({},常规对象)
来创建一个新对象,但所有字段都是从
常规对象复制的

但是请记住,这是一个浅拷贝,新实例和旧实例都将通过
details
字段指向同一数组



该函数允许您为所创建的对象指定原型,这将导致在功能上与所需的行为相似,并使您看到所观察到的结果。

您可能希望使用
对象。分配({},general_obj)
来创建新对象,但所有字段都是从
通用对象
复制的

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
    });
}
但是请记住,这是一个浅拷贝,新实例和旧实例都将通过
details
字段指向同一数组


该函数允许您为所创建的对象指定一个原型,这将导致在功能上与您想要的行为相似,并将导致您看到正在观察的结果

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,您可以克隆您的对象


使用json,您可以克隆对象…

请尝试以下操作:

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");

请尝试以下操作:

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");


@图萨编辑。谢谢你的代码。只是继承的属性没有被记录。尝试
console.log(result.count)
-它是
0
。编辑得更具体。。抱歉,代码不完整。我看到您已将我的转换还原为代码片段。如果我不理解你的意图,我很抱歉。Gerry-取决于你所说的“实例”是什么意思。如果您的意思是“复制”,那么
Object.create()
是错误的方法。如果你的意思是“有一个链接到
general\u obj
作为它的原型”,那么这就是你的代码所做的。@Tushar编辑。谢谢你的代码。只是继承的属性没有被记录。尝试
console.log(result.count)
-它是
0
。编辑得更具体。。抱歉,代码不完整。我看到您已将我的转换还原为代码片段。如果我不理解你的意图,我很抱歉。Gerry-取决于你所说的“实例”是什么意思。如果您的意思是“复制”,那么
Object.create()
是错误的方法。如果你的意思是“有一个链接到
general\u obj
作为它的原型”,那么你的代码就是这样做的。请注意,如果对象有方法,这是不起作用的。或者循环引用。我知道,但在这种情况下,这是一种简单的方法。谢谢,但我不明白。为什么stringify和object并再次解析它会成为一个克隆呢?没有必要仅仅为了获得一个新实例而序列化和反序列化对象。确实,这些操作速度很快,但与其他方法相比——Object.assign、{…}语法或只是在for循环中逐字段复制——它们非常昂贵而且没有必要。欢迎使用。Stringify用Json表示对象的字符串。接下来,在json.parse中传递这个字符串,它从json字符串创建js对象。结果是您有了一个与startin对象相等的新js对象。正如@nnnnnn所说,只有当您的起始对象是“平坦的”,没有方法或循环引用时,这种方法才有效。在这种情况下,您需要装箱一个类,并实例化该类。请注意,如果对象有方法,则这不起作用。或者循环引用。我知道,但在这种情况下,这是一种简单的方法。谢谢,但我不明白。为什么stringify和object并再次解析它会成为一个克隆呢?没有必要仅仅为了获得一个新实例而序列化和反序列化对象。确实,这些操作速度很快,但与其他方法相比——Object.assign、{…}语法或只是在for循环中逐字段复制——它们非常昂贵而且没有必要。欢迎使用。Stringify用Json表示对象的字符串。接下来,在json.parse中传递这个字符串,它从json字符串创建js对象。结果是您有了一个与startin对象相等的新js对象。正如@nnnnnn所说,只有当您的起始对象是“平坦的”,没有方法或循环引用时,这种方法才有效。在这种情况下,您需要装箱一个类,并实例化该类。好的,那么您将如何基于第一个实例创建另一个实例?这是OP中的预期结果吗??“我想从general_obj创建新实例。我希望结果将具有与general_obj相同的结构…”好,你会如何在第一个实例的基础上创建另一个实例?这是OP中的预期结果吗?“我想从general_obj创建新实例。我期望结果将与general_obj具有相同的结构…”是的,我尝试了此分配,但细节[]不断增加。我想是因为你提到的“指向同一个数组”。谢谢是的,我试过这个任务,但是细节一直在增加。我想是因为你提到的“指向同一个数组”。谢谢