Возьмите этот объект 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'