【问题标题】:How to stringify Javascript function object with properties?如何使用属性对 Javascript 函数对象进行字符串化?
【发布时间】:2015-09-21 02:55:14
【问题描述】:

在打字稿中,当每个静态成员成为函数对象属性时,具有静态成员的类被编译为函数。

例如:

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 不能表示函数。您是否要将函数视为仅包含其静态成员的对象字面量?
  • @JamesAllardice 完全正确

标签: javascript json typescript stringify


【解决方案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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 2016-11-10
    • 1970-01-01
    • 2018-02-06
    • 2016-04-14
    • 2018-09-14
    • 1970-01-01
    相关资源
    最近更新 更多