2015-05-09 3 views
0
RPGDATA = { 
    turkey: 'Leg', 
    chicken: 'Muffin' 
} 
var tempdata = RPGDATA; 

    RPGDATA.turkey = 'NoLeg'; 

console.log(tempdata); // Why is this showing NoLeg? It should be 'Leg'? 

console.log(RPGDATA); 

На jsfiddle: http://jsfiddle.net/njxd7eLy/1/Как вы храните объект во временной переменной?

Когда консоль регистрации TempData, он демонстрирует свойства нового объекта с изменениями применяются?

Редактировать: Посмотрите пример: http://jsfiddle.net/zLeufxfm/ Старые данные хранятся в этой переменной tempdata, но это не с объектом?

+1

Там нет нового объекта. Вы сохраняете * тот же * объект во второй переменной. Если вы хотите создать новый объект, вам нужно быть явным и скопировать все свойства вручную. – Bergi

+0

О, я знаю, что нет нового объекта, но почему данные, которые остались неизменными, хранятся в tempdata? Данные в tempdata не изменены? –

+2

Ваша переменная tempdata - это просто ссылка на объект RPGDATA. – chRyNaN

ответ

3

Объекты в JavaScript передаются по ссылке. Вам нужно клонировать объект, если вы хотите изменить каждый объект самостоятельно.

Объект JSON может помочь рационализировать это.

http://jsbin.com/sonapebawo/1/edit?js,console

var myObj = { 
    name: 'bob', 
    age: '42' 
}; 

var copy = JSON.parse(JSON.stringify(myObj)); 

myObj.newProp = 'Hello'; 

copy.otherProp = 'Yo'; 

console.log(copy, myObj); 

Некоторая документация:

JSON Object

Working with objects

+0

'Объекты в JavaScript передаются по ссылке.', Которые действительно меня огорчают. В любом случае, я думаю, мне нужно снова разобрать и сделать все, что только для клона ... Я скоро помечаю вас как можно лучше. Благодаря! –

+0

Объекты в JavaScript пропускаются много - и я имею в виду ** много **. Многие сложные системы зависят от этого для их функциональности. Object-by-reference позволяет использовать огромную гибкость в языке. Я настоятельно рекомендую вам прочитать статью [Работа с объектами] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects). – Oka

+0

О, я согласен @ Ока, я, может быть, просто подумал, что Javascript сделал бы это внутренне, и JSON аккумулировал его автоматически, чтобы сделать его проще. Единственный способ узнать, если я попытаюсь найти материал, который не работает или не раздражает меня. И это один случай, когда это раздражает, но как только я это понял, я могу его использовать. Когда я думаю о хранении данных в переменных, мне нужно думать только о хранении VALUES. Если это имеет смысл LOL. –

1

Выход должен быть как "NoLeg". Как упоминалось в ответе Оки: Объекты в JavaScript передаются по ссылке.

Эта схема проста, которая поможет понять, как передаются значения в JavaScript: http://huaban.com/pins/169758716/