我有一个这种结构的原型:
function MyObj() { }
MyObj.prototype = {
prop1: {
prop11: null,
prop12: null,
prop13: null,
},
prop2: {
prop21: null,
prop22: null,
prop23: null,
},
prop3: {
prop31: [],
prop32: '',
prop34: [],
},
prop4: {
prop41: null,
},
}
当我致电JSON.stringify(myObjInstance)
时,我得到{}
,为什么?
答案 0 :(得分:3)
这是因为prop1
到prop4
是原型的属性,而不是实例化对象的属性。
您可以将其与以下内容进行比较:
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
// add property to bag
}
}
仅使用对象本身的属性。
答案 1 :(得分:2)
因为JSON.stringify
只包含一个对象的拥有属性(特别是拥有可枚举的属性),所以不是对象继承自其原型或其自身的任何属性不可枚举的属性。
例如:Live Copy | Live Source
function Foo() { }
Foo.prototype.inherited = true;
var f = new Foo();
Object.defineProperty(f, "ownNonEnumerable", {
value: true
});
f.ownEnumerable = true;
console.log(f.inherited); // true
console.log(f.ownNonEnumerable); // true
console.log(f.ownEnumerable); // true
console.log(JSON.stringify(f)); // {"ownEnumerable": true}
答案 2 :(得分:1)
JSON.stringify
只有hasOwnProperty
才能找到属性,并且
new MyObj().hasOwnProperty("prop1") === false;
请改为尝试:
JSON.stringify(MyObj.prototype);
答案 3 :(得分:1)
JSON.stringify(obj)
将输出对象本身所具有的属性,而不是其原型。它的原型是另一个对象。
你正在寻找的东西是这样的
JSON.stringify(MyObj.prototype)
答案 4 :(得分:-1)
当我开始使用JSON.stringify时,我遇到了同样的问题。为了创建一个字符串,您创建的对象需要typeof == object。否则它将无法工作。
尝试提醒MyObj的typeOf。如果它不是不起作用的对象。
MyObj = {
prop1: {
prop11: null,
prop12: null,
prop13: null,
},
prop2: {
prop21: null,
prop22: null,
prop23: null,
},
prop3: {
prop31: [],
prop32: '',
prop34: [],
},
prop4: {
prop41: null,
},
}