динамическое обновление свойств объекта в цикле
всем привет!
Вообщем столкнулся с одной проблемой, которую в принципе могу обойти обходным путем, но мне интересна причина такого поведения. Вообщем, есть код: 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. Почему так происходит - я не понимаю, вроде бы переопределение свойств должно происходить в рантайме. Вопрос - подскажите пожалуйста, по какой причине значения свойств не присваиваются динамически? заранее благодарю :) |
Цитата:
У тебя ведь объект 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); |
grego,
в начало строки 3 добавить var и перенести в конец 15ой |
Ребята, спасибо! Оба ответа подошли под решение!)
|
Часовой пояс GMT +3, время: 20:11. |