이전에 Json 객체의 Deep Copy 방식, 즉
코드 복사에 대한 블로그 게시물을 본 적이 있습니다. 코드는 다음과 같습니다.
var obj = {
sayName: function() {
alert(this.name)
},
name:'Jingshuiyuan'
}; var cloneObj=JSON.parse (JSON.stringify(obj));cloneObj.sayName();
그러나 이 방법으로는 속성 값을 함수의 속성으로 복사할 수 없으므로 개선된 코드는 다음과 같습니다.
var obj = {
sayName: function() {
alert(this.name)
},
name:'Still Water Abyss'
}; clone(){
var str,newObj;
str= JSON .stringify(obj, function(key, value) {
return (typeof value == 'function' ? value.toString().replace (/^function(.*)/g, "jsonFunction$1") : value );
})
newObj = JSON.parse(str, function (key, value) {
if (/ ^jsonFunction(.*)/.test(value)) {
var strFun = '(' value.replace(/^jsonFunction(.*)/, "function$1") ')'
value = eval(strFun);
}
return value;
});
return newObj;
var cloneObj=clone(obj); ;
아직 완전히 테스트되지 않았으므로 Shoot bricks를 환영합니다!