网站搜索

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))