拿这个javascript对象:
dog = {
owner: 'mike'
food: 'kibbles'
breed: {color: 'brown'
type: 'corgie'
gender:'f'
}
neuter:'y'
spay:'no'
name:'Sparky'
}
我提交了这些数据,然后我想在成功时清除它。 如果我写:
dog = {};
田地里没有任何事情发生。
但是,如果我将整个对象更改为:
dog.info = {
owner: 'mike'
food: 'kibbles'
breed: {color: 'brown'
type: 'corgie'
gender:'f'
}
neuter:'y'
spay:'no'
name:'Sparky'
}
然后我通过重新初始化对象来清除对象:
dog.info = {};
有效。 我用它来清除服务内部的角形。 有谁知道为什么会这样?一如既往地非常感谢您的帮助。 谢谢。
答案 0 :(得分:2)
这在很大程度上取决于您使用dog
的准确程度,而且由于您没有提供,我将自己编写示例。
这与对象存储在变量中的方式有关。请看以下示例:
var dog = {name: 'bob'};
var x = dog;
console.log(x.name); // 'bob'
x.name = 'george';
console.log(x.name); // 'george'
console.log(dog.name); // 'george'
dog = {name: 'frank'}; // dog and x now hold two different objects!
console.log(x.name); // 'george'
console.log(dog.name); // 'frank'
当我将x
设置为dog
时,x
存储了与dog
相同的对象,因此当我修改它时,dog
也被修改了。但是,当我用新对象覆盖dog
时,x
仍然包含旧对象,而不是更新到新对象。
通过使用dog.info
并且永远不会覆盖dog
,您保留了原始对象,因此所有内容仍然引用了正在更新的对象。
var dog = {info: {name: 'bob'}};
var x = dog;
console.log(x.info.name); // 'bob'
x.info.name = 'george';
console.log(x.info.name); // 'george'
console.log(dog.info.name); // 'george'
dog.info = {name: 'frank'}; // dog and x still hold the same object.
console.log(x.info.name); // 'frank'
console.log(dog.info.name); // 'frank'