我可以保持一个对象的副本,该对象内的其创建

时,我可以保留对象的副本,该对象内的其创建我可以保持一个对象的副本,该对象内的其创建

时,这是我的函数,它创建了一个新的学生对象:

function student(id, name, marks){ 

this.id = id;

this.name = name;

this.marks = marks;

}

我想创建对象的副本,当它被初始化的对象中: 我想出了这一点:

function student(id, name, marks){ 

this.id = id;

this.name = name;

this.marks = marks;

this.baseCopy = this;

}

但问题是它的给我在baseCopy中当前对象的无限循环;并且,当我更新我的对象的任何属性时,它也会自动更新。

1.如何在创建对象时保留具有初始值的对象的副本?

回答:

既然你已经使用jQuery通用的答案是:

this.baseCopy = $.extend(true, {}, this); 

会产生存在在任何时间属性值的“深”的副本,没有它递归指本身。

注意 - 我确实包含了一些通用的JS代码,但是OP完全改变了这个问题,因此返回仅仅使用jQuery更简单。这当然会复制直接存在于对象上的任何方法,但如果正确编写,这些方法将在对象的原型上。

回答:

一个jQuery的较少的选择:
(只要你知道它也可以做到人无)

function student(id, name, marks){ 

this.id = id;

this.name = name;

this.marks = marks;

var tempCopy = {}; // Initialize a temporary variable to copy the student to.

for(key in this){ // Loop through all properties on this (student)

if(this.hasOwnProperty(key)){ // Object.prototype fallback. I personally prefer to keep it in, see Alnitak's comment.

tempCopy[key] = this[key]; // Copy the property

}

}

this.baseCopy = tempCopy; // "Save" the copy to `this.baseCopy`

}

var s = new student(1, 'Jack', [5,7]);

s.marks = s.marks.concat([6,8]); // Jack's gotten 2 new marks.

console.log(s.name + "'s marks were: ", s.baseCopy.marks);

console.log(s.name + "'s marks are: ", s.marks);

// Logs:

// Jack's marks were: [5, 7]

// Jack's marks are: [5, 7, 6, 8]

这样做的好处是,它会自动复制学生的所有性质,而无需手动将其设置在baseCopy中。
另外,因为它不使用jQuery,所以速度更快一些。处理大量数据时,这可能很重要。

回答:

下面的方法对我的作品(可能不是最好的解决办法,有可能是另外一个涉及对象的原型)

function BaseStudent(id, name, marks) { 

this.id = id;

this.name = name;

this.marks = marks;

}

function Student(id, name, marks) {

this.baseCopy = new BaseStudent(id, name, marks);

BaseStudent.call(this, id, name, marks);

}

var s = new Student(1, 'Name', 100);

console.log(s.id); // logs 1

console.log(s.name); // logs 'Name'

console.log(s.marks); // logs 100

s.name = 'AnotherName';

console.log(s.name); // logs 'AnotherName'

console.log(s.baseCopy.name);​ // logs 'Name'

以上是 我可以保持一个对象的副本,该对象内的其创建 的全部内容, 来源链接: utcz.com/qa/263654.html

回到顶部