在不知道对象索引的情况下修改数组中对象的值

时间:2018-11-29 17:37:39

标签: javascript arrays html5 constructor

这可能只是设计缺陷,但我还是要问。

我有一个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的哪个索引中的情况下更改按钮的父窗口(窗口)的值?

0 个答案:

没有答案