如何用属性字符串化 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))
在 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))