Re: [ js ] object 和 prototype的问题

楼主: eight0 (欸XD)   2014-08-18 01:28:42
※ 引述《btsken (郝小明)》之铭言:
: 是这样的,我不太会描述这个问题....
: 就直接用例子说明好了XD
: 假设我在有一个物件Man
: function Man(name) {
: this.name = name;
: }
: Man.prototype.walk = function() {
: console.log("walk");
: }
: 我将物件转成json
: var json = JSON.stringify(new Man("tom"));
: 然后再转回来
: var man = JSON.parse(json);
: 我想问的是,从json转回来的物件有办法保有prototype的方法吗
: 小弟观念没有很好,先谢谢各位了~
同推文所说,JSON 是一种储存资料的格式,你的 walk 函式根本上就无法以
JSON 储存。下面是在实例化后再另外读取 JSON 的做法
function Man(name){
this.name = name;
}
Man.prototype = {
walk: function(){
console.log(this.name + " walk");
},
saveToJSON: function(){
return JSON.stringify(this);
},
loadFromJSON: function(json){
var o = JSON.parse(json);
for (key in o) {
this[key] = o[key];
}
}
};
var man = new Man("Tom");
man.walk(); // Tom walk
var man2 = new Man();
man2.loadFromJSON(man.saveToJSON());
man2.walk(); // Tom walk
作者: s25g5d4 (function(){})()   2014-08-18 02:38:00
使用 for in loop 永远记得检查 hasOwnProperty
楼主: eight0 (欸XD)   2014-08-18 12:30:00
这个情况下除非动到原生 Object,否则不用检查。不过确实应该在读取 JSON 时滤掉不合的值

Links booklink

Contact Us: admin [ a t ] ucptt.com