изменение значений объекта в массиве, не зная его индекса - PullRequest
0 голосов
/ 29 ноября 2018

Это может быть просто недостаток дизайна, но я все равно спрошу.

У меня есть холст 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 хранится это конкретное окно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...