这个问题怎么解决????

写了一个Obsrvable的应用,事件的监听有问题,代码如下:




Select Ticc Service


    <script type="text/javascript" src="person.js"></script>
    <script>
        Ext.onReady(function(){
            var events = new Array();
            events[0] = 'name1';
            events[1] = 'name2';
            events[2] = 'name3';

            var person = new Person(events);
            for( var index = 0; index < 3; index++ )
            {
                person.fireEvent(events[index]);
            }
        });
    </script>
</head>
<body>
</body>

person.js的代码如下
var structs = {
name1: 'name1()',
name2: 'name2()',
name3: 'name3()'
};

Person = function(events){
var size = events.length;

for(var index = 0; index < size; index++ )
{
    this.addEvents(events[index]);
    var event = events[index];

    this.addListener(events[index], function(){alert(event);});
}

}
Ext.extend(Person, Ext.util.Observable, {
setname: function(){}
});

function name1(){alert('name1');}

function name2(){alert('name2');}

function name3(){alert('name3');}

执行的时候只能弹出‘name3’,搞不清楚是JavaScript代码没写对还是Observable没有用对,请大家帮忙修改下,谢谢

修改成如下试试:

for(var index = 0; index < size; index++ )
{
(function(index){
this.addEvents(events[index]);
var event = events[index];

this.addListener(events[index], function(){alert(event);});
})(index);
}

应该是这部分要用闭包
for(var index = 0; index < size; index++ )
{
this.addEvents(events[index]);
var event = events[index];

this.addListener(events[index], function(){alert(event);});
}