Re: [ js ] object 和 prototype的問題

看板Ajax作者 ( )時間11年前 (2014/08/18 01:28), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《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 -- (* ̄▽ ̄)/‧★*"`'*-.,_,.-*'`"*-.,_☆,.-*` http://i.imgur.com/oAd97.png
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.25.246.194 ※ 文章網址: http://www.ptt.cc/bbs/Ajax/M.1408296526.A.3DD.html

08/18 02:38, , 1F
使用 for in loop 永遠記得檢查 hasOwnProperty
08/18 02:38, 1F

08/18 12:30, , 2F
這個情況下除非動到原生 Object,否則不用檢查。不過確實
08/18 12:30, 2F

08/18 12:30, , 3F
應該在讀取 JSON 時濾掉不合的值
08/18 12:30, 3F
文章代碼(AID): #1JyEPEFT (Ajax)
討論串 (同標題文章)
文章代碼(AID): #1JyEPEFT (Ajax)