以下代码将仅将循环中的最后一个Widget添加到 all 侦听器函数中。所有函数都将在最后一个对象上调用toggleShow()。
为什么会发生这种情况,是否有办法让每个Widget对象在相应的函数中被引用?
for each (var w:Widget in workspace.getWidgetList()) {
var widgetShow:NativeMenuItem = menu.addItem(new NativeMenuItem("Show " + w.title));
widgetShow.addEventListener(Event.SELECT, function():void {
w.toggleShow();
});
}
答案 0 :(得分:1)
使它成为一个函数,这是因为循环运行到结尾并且w成为该列表中的最后一个元素,所以当调用匿名函数时它总是使用最后一个元素:
for each (var w:Widget in workspace.getWidgetList()) {
addMenuItem(w);
}
function addMenuItem(w:Widget):void
{
var widgetShow:NativeMenuItem = menu.addItem(new NativeMenuItem("Show " + w.title));
widgetShow.addEventListener(Event.SELECT, function():void {
w.toggleShow();
});
}