如何用属性字符串化 Javascript 函数对象?

How to stringify Javascript function object with properties?

在 typescript 中,当每个静态成员都成为一个函数对象时,一个带有静态成员的 class 被编译成一个函数 属性。

例如:

class Config {
    static debug = true;
    static verbose = false;
}

变成

var Config = (function () {
    function Config() {
    }
    Config.debug = true;
    Config.verbose = false;
    return Config;
})();

在此类函数对象上调用 JSON.stringify 将产生 undefined。 在这种情况下,正确的字符串化方法是什么?

请注意,JSON.stringify 不采用函数。你可以这样做:

If an object being stringified has a property named toJSON whose value is a function, then the toJSON() method customizes JSON stringification behavior: instead of the object being serialized, the value returned by the toJSON() method when called will be serialized.

一个例子:

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