마지막으로 수행 한 작업은 이전에 JSON을 사용하여 저장 한 객체를 완전히 복구하는 것입니다. 현재 JSON은 데이터 만 복구 할 수 있지만 동작은 허용하지 않습니다. 해결책은 새로운 객체를 생성하고 (obj라고 부름) JSON에서 복구 한 객체의 데이터를 obj로 복사하는 것입니다. 그러나 그것은 나에게 좋지 않다. JavaScript에서 객체 프로토 타입을 동적으로 변경하는 방법이 있습니까?JavaScript 객체의 프로토 타입을 동적으로 변경합니다.
은 내가 (자체 제작 복사 방법을 사용하여) 순간에 문제를 해결하는 방법은 다음과 같습니다
function Obj() {
this.D = "D";
this.E = "E";
this.F = "F";
this.toString = function() {
return this.D + " * " + this.E + " * " + this.F;
};
this.copy = function (anotherObj) {
for (var property in anotherObj) {
if (isDef(anotherObj[property]) && isDef(this[property])) {
this[property] = anotherObj[property];
}
}
}
}
;
$(document).ready(function() {
var str = $.toJSON(new Obj());
$("#result").append("<p>JSON: " + str + "</p>");
var obj = new Obj();
obj.copy($.parseJSON(str));
$("#result").append("<p>Recovered obj: " + obj.toString() + "</p>");
});
function isDef(variable)
{
return typeof variable !== undefined;
}
감사 :
핵심 아이디어는 확실히 (단지 데이터이다) JSON에서 복원 객체가 첫번째 매개 변수
$.extend()
하는 대신 속성의 프로토 타입을 사용하고 확인하는 것입니다. 그것은 내가 찾고 있었던 것이다. 그것은 개체 필드가있는 경우 작동하지 않는 것이 유감 : http://jsfiddle.net/mr_goodcat/KfQrc/2/ –업데이트 : "깊은 사본"해결책이어야하지만, 나는 그것을 작동하게 할 수없는 것 같습니다 행동 부분 (데이터 복구) : http://jsfiddle.net/mr_goodcat/KfQrc/3/ –
그래, 나도 그 일을 할 수 없었어. 중첩 된 프로토 타입 복사는 까다 롭습니다. – GregL