#javascript #oop
#javascript #ооп
Вопрос:
Сценарий: — заполнить объект1 — скопировать содержимое объекта1 в объект2 — удалить элемент из объекта1
Результат теперь: — у обоих object1 и object2 удален 1 элемент …?!
Желаемый результат: — у object1 должно быть на 1 элемент меньше, чем у 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'];
Что я делаю не так?
Комментарии:
1. я не вижу никакой связи с многомерными массивами..
2. Ваш код не соответствует вашему объяснению. Я подозреваю, что вы делаете поверхностное копирование, но ваш код вообще не копирует.
Ответ №1:
Ваш код не выполняет никакого копирования. 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
.
Надеюсь, это имеет смысл.
Комментарии:
1. черри, ты спас мой день, это работает! тысячу раз спасибо! правила stackoverflow!
2. @Ozcar: Тогда отметьте этот ответ правильным. Дайте человеку некоторую репутацию!
3. @Ozcar: не забывайте использовать
hasOwnProperty
.4. да, если у вас есть кодовая база, которая модифицируется,
Object.prototype
тогдаhasOwnProperty
это важно.
Ответ №2:
Мне не кажется, что object2 когда-либо получал какие-либо свойства object1. Вы на правильном пути, но вам нужно их скопировать.
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'];