Why doesn't JSON.stringify display object properties that are functions?

断了今生、忘了曾经 提交于 2019-12-29 06:18:17

问题


Why doesn't JSON.stringify() display prop2?

var newObj = {
  prop1: true,
  prop2: function(){
    return "hello";
  },
  prop3: false
};

alert( JSON.stringify( newObj ) ); // prop2 appears to be missing

alert( newObj.prop2() ); // prop2 returns "hello"

for (var member in newObj) {
    alert( member + "=" + newObj[member] ); // shows prop1, prop2, prop3
}

JSFIDDLE: http://jsfiddle.net/egret230/efGgT/


回答1:


Because JSON cannot store functions. According to the spec, a value must be one of:


(source: json.org)


As a side note, this code will make the functions noticed by JSON.stringify:

Function.prototype.toJSON = function() { return "Unstorable function" }



回答2:


Here is another way with using a .prototype. You can add an function to stringify

JSON.stringify(obj, function(k, v) {
  if (typeof v === 'function') {
    return v + '';
  }
  return v;
});



回答3:


It's not supposed to stringify methods (or any functions) - especially since most methods of built in objects (and thus the prototypes of any user-defined objects) are native code.

If you really need it to print your methods out, you can override your object's .toString method, but when you call JSON.parse on the stringified output, it will treat the method as if it were just a string, and to be able to call it as a function you'd have to eval it - a practice that is typically not recommended.



来源:https://stackoverflow.com/questions/10729258/why-doesnt-json-stringify-display-object-properties-that-are-functions

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!