json - 如何将具有属性的 JavaScript 函数对象转换为字符串?
在 TypeScript 中,一个带有静态成员的类在编译时会变成一个函数,每个静态成员都会变成函数对象的属性。
例如:
class Config {
static debug = true;
static verbose = false;
}
变成
var Config = (function () {
function Config() {
}
Config.debug = true;
Config.verbose = false;
return Config;
})();
对这样的函数对象调用 JSON.stringify 会得到 undefined。在这种情况下正确的字符串化方法是什么?
答案#1
请注意,JSON.stringify 不会处理函数。你可以这样做:
如果一个要被字符串化的对象有一个名为
toJSON的属性,其值是一个函数,那么 toJSON() 方法会自定义 JSON 字符串化的行为:被调用时 toJSON() 方法返回的值会被序列化,而不是对象本身。
一个例子:
Function.prototype.toJSON = Function.prototype.toJSON || function(){
var props = {};
for(var x in this){
if(this.hasOwnProperty(x)) props[x] = this[x]
}
return props
}
var Config = (function () {
function Config() {
}
Config.debug = true;
Config.verbose = false;
return Config;
})();
console.log(JSON.stringify(Config))