我想写的是这样的。
Object.prototype.toString = function(){
var ret = '{';
for(var i in this){
if(this[i].toString)
ret = ret + ( '"'+i+'":' + this[i].toString())
}
ret=ret+'}'; return ret;
}
我将为Number和其他已知的dataTypes执行此操作。
我已经看到很多utils.stringify函数和JSON.stringify,所有这些库正在做的是,它们正在检查对象的类型,并基于它们连接字符串来创建Json。没关系,我不能使用这些功能,因为我想使用这样的东西: -
function subMap(){
this.data = { a : 'A', b : 'B'}
this.toString = function(){
return this.data.toString()
}
}
utils.parse(({
x : new subMap()
}).toString())
应返回类似这样的内容
"{"x":{"a":"A","b":"B"}}"
基本上我希望每当我添加新的DataType时,我都可以决定如何为任何ObjectType表示StringFormat(JSON)。
但是看看所有可用的libs,我看到没有人这样做(定义toString函数),我认为这是更好的方法。是否有任何缺点或JavaScript在内部使用它来做一些会破坏某些东西或其他任何不使用它的原因?
修改
我找到了答案。在链接 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
function subMap(){
this.data = { a : 'A', b : 'B'}
this.toJSON = function(){
return this.data;
}
}
应该像我期望的那样工作。
答案 0 :(得分:1)
您可以使用JSON.stringify(value, replacer, space)
的第二个参数执行此操作:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
答案 1 :(得分:0)
尝试使用toJSON
function subMap(){
this.data = { a : 'A', b : 'B'}
this.toJSON = function(){
return this.data;
}
}
这可能会解决您的问题