为什么这样做?清除用作窗体的javascript对象

Why does this work? Clearing a javascript object being used as a form

本文关键字:窗体 javascript 对象 这样做 清除 为什么      更新时间:2023-09-26

使用这个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={};

它有效。我正在使用它来清除服务内部的角度形式。有人知道为什么会这样吗?我们一如既往地感谢你的帮助。非常感谢。

这在很大程度上取决于您使用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'