触发事件后的执行顺序

时间:2011-02-22 17:32:41

标签: javascript events extjs event-handling

someClass = Ext.extend(someOtherClass,
   initComponent: function (){
      someFunction();
      this.on('exampleEvent', someFuntion2(), this);
   },
   someFunction: function (){
      this.fireEvent('exampleEvent');
      return null;
   }
   //...
}

紧接在“this.fireEvent('exampleEvent');”之后“返回null”执行或“someFuntion2()”?为什么呢?

1 个答案:

答案 0 :(得分:0)

首先,这里的第二个论点是:

this.on('exampleEvent', someFuntion2(), this);

应该是一个Function对象,你实际上已经在这里执行了someFunction2()......所以你可能想说:

this.on('exampleEvent', someFuntion2, this);

(注意someFunction2之后缺少的parens())

要回答你的问题,someFunction2将首先执行,因为Observable在ExtJS中的工作方式。当你调用fireEvent('exampleEvent')时...... Observable类(someClass必须从继承链中的somePoint扩展)将循环遍历为该事件添加了一个监听器的所有对象,并调用传递的Function对象在添加监听器的时候 - 在你的情况下,someFunction2(没有parens)

当然,添加事件监听器时可以添加选项,这会导致在事件触发后延迟执行函数...