我想将对象的功能和属性复制到新对象中。旧对象不应通过更改新对象中的效果来生效。
这是对象定义:
var Call = function() {
this.number="123";
}
Call.prototype.function1 = function() {
return this.number;
}
var callobj = new Call();
我可以使用callobj.function1()
访问function1。
我试图复制它:
使用Javascript:
var newcallobj = Object.assign({}, callobj);
在这种情况下,我无法访问function1,但我可以直接访问号码属性。
JQUERY:
var newObj = jQuery.extend(true, {}, callobj); OR
var newObj = jQuery.extend({}, callobj);
在这种情况下,我可以访问function1和property但是当我更改newObj.number="222"
之类的数字时。它还会更改原始对象的值。
我知道还有其他几个帖子。但一切都不适合我。如果我做错了什么,请告诉我?
AFTER @ gurvinder372回答(我正在更新问题): @ gurvinder372之后回答。它适用于第一级属性,但如果它有另一个对象,如我在下面显示,我更改另一个对象的属性值。然后它也影响原始对象。
var ABC = function(){
this.number = "333";
}
var Call = function() {
this.number="123";
this.anotherobj = new ABC();
}
Call.prototype.function1 = function() {
return this.number;
}
var callobj = new Call();
var newcallobj = Object.create(callobj);
newcallobj.anotherobj.number= "123";
console.log(newcallobj.anotherobj.number);
console.log(callobj.anotherobj.number);
两者的输出均为123. @ gurvinder372。你可以查看上面的代码吗?
答案 0 :(得分:2)
Object.assign
仅复制对象的可枚举属性。
使用Object.create
代替Object.assign
var newcallobj = Object.create(callobj);
var Call = function() {
this.number="123";
}
Call.prototype.function1 = function() {
return this.number;
}
var callobj = new Call();
var newcallobj = Object.create(callobj);
console.log(newcallobj.function1());

答案 1 :(得分:0)
确定。在@ gurvinder372的帮助下。以下解决方案对我有用。
var ABC = function(){
this.number = "333";
}
var Call = function() {
this.number="123";
this.anotherobj = new ABC();
}
Call.prototype.function1 = function() {
return this.number;
}
var callobj = new Call();
var newcallobj = Object.create(callobj);
newcallobj.anotherobj = Object.create(callobj.anotherobj);
newcallobj.anotherobj.number= "123";
console.log(newcallobj.anotherobj.number);
console.log(callobj.anotherobj.number);
如果有更好的解决方案,请告诉我吗?