2015-07-03 3 views
1

В машинописном классе класс со статическими членами скомпилируется в функцию, когда каждый статический член становится свойством объекта функции.Как связать объект функции JavaScript со свойствами?

Например:

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 не может представлять функции. Вы хотите обработать функцию так, как если бы это был объектный литерал, содержащий только его статические члены? –

+0

@JamesAllardice точно – MichaelS

ответ

2

Обратите внимание, что JSON.stringify не выполняет функции. Вы можете сделать это следующим образом:

Если объект быть строковым имеет свойство с именем toJSON, значение которого является функцией, то метод toJSON() адаптирует JSON поведение stringification: вместо того, чтобы объект сериализовано, значение, возвращаемым 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))

Смежные вопросы