2010-08-12 4 views
0

Сценарий: - заполнить object1 - копирование содержимого object1 в Объект2 - удалить элемент из Object1JS: связанные объекты

Результата Сейчас: - как Object1 и Объект2 имеет один элемент удален ...?!

Хотела результат: - object1 должен иметь один элемент меньше, чем Object2

Код:

var object1 = new Object(); 
object1['key_one'] = 'value_1'; 
object1['key_two'] = 'value_2'; 
object1['key_three'] = 'value_3'; 
object1['key_four'] = 'value_4'; 
var object2 = new Object(); 
object2 = object1; 
delete object1['key_three']; 

Что я делаю не так?

+0

Я не вижу никакого отношения к многомерным массивам .. – mykhal

+0

Ваш код не соответствует вашим объяснениям. Я подозреваю, что вы делаете мелкую копию, но ваш код вообще не копирует. – deinst

ответ

0

Ваш код не копирует. object2 - это просто новый пустой объект. Попробуйте это:

var object1 = { 
    key_one: "value_1", 
    key_two: "value_2", 
    key_three: "value_3", 
    key_four: "value_4" 
}; 
var object2 = {}; 
for (var prop in object1) { 
    object2[prop] = object1[prop]; 
} 
delete object1["key_three"]; 

Теперь object2 является копией object1, но удаление свойства из object1 не будет влиять на object2.

Надеюсь, что имеет смысл.

+0

bcherry, ты спас мой день, он работает! спасибо тысячу раз! правила stackoverflow! – Ozcar

+0

@Ozcar: Отметьте этот ответ правильно. Дайте человеку репутацию! – ajm

+0

@ Ozcar: не забудьте использовать 'hasOwnProperty'. –

0

Не похоже, чтобы объект object2 когда-либо получал какие-либо свойства объекта1. Вы на правильном пути, но вам нужно их скопировать.

var object1 = new Object(); 
object1['key_one'] = 'value_1'; 
object1['key_two'] = 'value_2'; 
object1['key_three'] = 'value_3'; 
object1['key_four'] = 'value_4'; 

var object2 = new Object(); 
for(var i in object1){ 
    object2[i] = object1[i]; 
} 
delete object1['key_three']; 
Смежные вопросы