有一个Node.js生成的Object,当我使用时它看起来像这样console.log
:
{ dataValues: { a: 1, b: 2 }, fn1: function(){}, fn2: function(){} }
当我使用JSON.stringify
,它返回这个字符串:
{"a":1,"b":1}
我检查了mozilla开发者中心,发现this https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify:
All 符号键控即使使用替换函数,属性也将被完全忽略。
我认为“dataValues”必须是“符号键控”属性,但是“符号键控”是什么意思?
顺便说一句,我用续集js http://sequelizejs.com/ORM lib 来生成这个对象。
我终于找到原因了page https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify:
如果要字符串化的对象具有名为 toJSON 的属性,其值为函数,则 toJSON 方法会自定义 JSON 字符串化行为:将序列化 toJSON 方法调用时返回的值,而不是序列化对象。
它在浏览器上正常运行。
这里是jsfiddle http://jsfiddle.net/tomwan/s5epz872/2按照我的要求运行它。
Code:
function test(data) {
for(var key in data){
this[key] = data[key];
}
}
test.prototype.toJSON = function(){
return this.dataValues;
}
var a = new test({dataValues: {a:1, b:2}});
console.log(a);//the instance
console.log(JSON.stringify(a));//{"a":1,"b":1}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)