Это может быть просто недостаток дизайна, но я все равно спрошу.
У меня есть холст HTML5 и конструктор buttonTemplate и windowTemplate, которые выглядят примерно так:
function buttonTemplate(x,y,w,h,callback) {
//
//some logic (such as determining collision between the mouse cursor
//and the button, and whether or not the mouse has been clicked)
callback();
}
function windowTemplate(x,y,w,h) {
this.exit = false;
this.x = x;
this.y = y;
this.w = w;
this.h = h;
this.buttons = new Array();
this.buttons.push(new buttonTemplate(x+w,y,20,20,function(){
this.exit = true;
}));
this.draw = function() {
//draw the window and all of its buttons
}
}
Конструктор buttonTemplate выглядит в основном так же, как конструктор windowTemplate, за исключением того, что он также снабжен функцией обратного вызова при нажатии.
Окна объявляются в массиве всех окон на холсте.
windowArray.push(new windowTemplate(...));
Теперь, когда я создаю объект windowTemplate, он автоматически создает свой собственный buttonTemplate, действующий как кнопка выхода.Проблема в функции обратного вызова этой кнопки.Я хочу, чтобы она установила для переменной «exit» своего родителя (окна) значение true, чтобы отдельная функция могла затем удалить окно и все его дочерние элементы с экрана (чтобы закрыть окно).
Очевидно, что проблема заключается в том, что вызов функции обратного вызова в кнопке не устанавливает для переменной выхода родительского элемента (окна) значение true, а вместо этого создает новую переменную внутри объекта кнопки, которая затем устанавливаетсяв true.
Как изменить значения родительского элемента (окна), не зная, в каком индексе windowArray хранится это конкретное окно?