На данный момент я испытываю какое-то действительно странное поведение объекта. У меня есть этот шаблон объекта:Связанные объекты?
template: {
trigger: {
width: 32,
height: 32,
delay: 0
},
player: {
direction: {
value: "right",
options: "left|right"
}
},
apple: {
direction: {
value: "down",
options: "up|down|left|right"
}
}
},
, который является объектом объекта под названием layers
. Внутри функции объекта layers
Я добавляю новые данные (объекты) в пустой объект entities
.
if (!this.entities[which])
{ this.entities[which] = []; }
if (!this.entities[which][id])
{ this.entities[which][id] = {}; }
this.entities[which][id].pos = "0,0";
this.entities[which][id].variables = {};
this.entities[which][id].variables = this.template[which];
Так позже, когда я пытаюсь изменить this.entities[which][id].variables.width
, например, каждый entitie которому принадлежит тот же шаблон для which
получает то же свойство, а также объект шаблона, который не будет изменен в коде хоть. Я отлаживал почти все и просматривал каждый бит кода. Идентификаторы entitie также уникальны.
часть, где объект получает изменился, выглядит так: input.setAttribute("onkeyup", "layers.entities['" + i + "'][" + j + "].variables['" + jj + "'] = this.value; layers.updateEntities();");
Где я это имя entitie, J является идентификатором и Дж.Дж. имени опций.
Вы можете попробовать его для себя прямо здесь: [удалено]
Переключитесь на слой сущностей, добавьте два триггера, перетащите один вокруг, щелкните правую кнопку мыши и изменить одно из свойств. Оба будут меняться, хотя у них разные идентификаторы. Также новые будут иметь эти свойства.
Потому что сам шаблон get изменился, я подумал, что этот this.entities[which][id].variables = this.template[which];
каким-то образом связывает эти два объекта вместе, вместо того, чтобы присваивать «копию» левой переменной. Я никогда не слышал ничего подобного.
Ах, я не знал об этом. Спасибо! :) –