这可能只是设计缺陷,但我还是要问。
我有一个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的哪个索引中的情况下更改按钮的父窗口(窗口)的值?