динамическое обновление свойств объекта в цикле
всем привет!
Вообщем столкнулся с одной проблемой, которую в принципе могу обойти обходным путем, но мне интересна причина такого поведения. Вообщем, есть код:
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, время: 03:59. |