Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.12.2013, 23:04
Интересующийся
Отправить личное сообщение для grego Посмотреть профиль Найти все сообщения от grego
 
Регистрация: 09.01.2012
Сообщений: 26

динамическое обновление свойств объекта в цикле
всем привет!

Вообщем столкнулся с одной проблемой, которую в принципе могу обойти обходным путем, но мне интересна причина такого поведения.

Вообщем, есть код:
var i = 0,
        length = 10,
        relation = {
            startPoint: {
                x:0,
                y:0
            },
            endPoint: {
                x:0,
                y:0
            }
        },
        relations = [];

        for(; i< length; i++) {
            relation.startPoint.x = i;
            relation.startPoint.y = i;
            relation.endPoint.x = i;
            relation.endPoint.y = i;
            relations.push(relation);
        }

        console.log(relations);


Суть кода заключается в динамическом изменении свойств объекта, после чего текущий объект заносится в массив. Ожидается, что на выходе получается массив из объектов, в котором для свойств будут заданы значения от нуля до 9 для каждого последующего объекта соответственно.
Но, в реальности получается так, что на выходе получается массив, в котором у каждого объекта значение свойств = 9.
Почему так происходит - я не понимаю, вроде бы переопределение свойств должно происходить в рантайме.
Вопрос - подскажите пожалуйста, по какой причине значения свойств не присваиваются динамически?
заранее благодарю
Ответить с цитированием
  #2 (permalink)  
Старый 04.12.2013, 00:15
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от grego
Ожидается, что на выходе получается массив из объектов,
А в итоге у тебя получается массив из 10 ссылок на один и тот же объект.
У тебя ведь объект relation один? Один!
Создавай на каждой итерации новый объект. Например так:


var i = 0,
        length = 10,
        relations = [];
 
        for(; i< length; i++) {
            relations.push({
                startPoint: {
                    x:i,
                    y:i
                },
                endPoint: {
                    x:i,
                    y:i
                }
            });
        }
 
        console.log(relations);



Или напиши функцию clone() (или copy()), которая будет создавать копию объекта.

Можешь еще так сделать (в традиционном стиле для ооп):

function Relation(startX, startY, endX, endY) {
    this.startPoint = {
        x: startX,
        y: startY
    };
    this.endPoint = {
        x: endX,
        y: endY
    };
}

var i = 0,
    length = 10,
    relations = [];

for(; i< length; i++) {
    relations.push(new Relation(i, i, i, i));
}

console.log(relations);
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 04.12.2013, 07:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

grego,
в начало строки 3 добавить var и перенести в конец 15ой
Ответить с цитированием
  #4 (permalink)  
Старый 04.12.2013, 23:29
Интересующийся
Отправить личное сообщение для grego Посмотреть профиль Найти все сообщения от grego
 
Регистрация: 09.01.2012
Сообщений: 26

Ребята, спасибо! Оба ответа подошли под решение!)
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доступ к значениям свойств объекта в цикле Bandicoot Общие вопросы Javascript 4 04.02.2016 11:44
Выдать список всех свойств указанного при вводе объекта указанного фрейма flasher167 Общие вопросы Javascript 11 05.04.2013 08:14
load и динамическое обновление страницы IONEX AJAX и COMET 12 08.07.2012 20:57
получение значений свойств объекта bear9 Общие вопросы Javascript 3 01.12.2011 23:32
Не работает перебор свойств объекта BANick Общие вопросы Javascript 1 16.09.2008 22:46