如何在javascript中创建对象的新实例
我很难从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创建新实例。我希
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具有相同的结构…”是的,我尝试了此分配,但细节[]不断增加。我想是因为你提到的“指向同一个数组”。谢谢是的,我试过这个任务,但是细节一直在增加。我想是因为你提到的“指向同一个数组”。谢谢