在window.setTimeout方法中传送对象

  其语法是:

  window.setTimeout(expr,msec)

  expr是执行字符串,在msec毫秒之后,就会作为js运行。我昨天才发现,原来expr也可以是一个函数,呵呵,用这个特性,就可以进行对象的传送了。

  下面的代码实现了把函数foo1中的对象p,延时传送到函数foo2中的功能。

  

   [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

  

   [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

  

   [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

  现在很多框架其实都直接一种多投事件(它的实现原理也不复杂),一个多投事件本身,其实是是一个标准的函数,但是它一般有下述的方法。

  MuEvent.add = function (func) { ... }

  MuEvent.addMethod = function (instance, func) { ... }

  当使用第一种方法时,在激活func这个事件处理函数时,使用MuEvent的当前实例为this对象;第二种则使用传入的instance作为this对象。

  因此对于setTimeout来说,我们传统的方法要这样使用它来激活方法:

  ----------

  function doTimer() {

  obj1.call();

  obj2.call();

  }

  setTimeout(doTimer, 1000);

  而使用多投事件的代码就可以如下:

  ----------

  var e = new MuEvent();

  e.addMethod(obj1, obj1.call);

  e.addMethod(obj2, obj2.call);

  setTimeout(e, 1000);

  ----------

  当然,你想要写得COOL一点,可以是这样:

  ----------

  setTimeout(function() {

  return new MuEvent(obj1, obj1.call, obj2, obj2.call);

  }(), 1000);

  ----------

  作为一点点介绍,我所做的Qomo是用这种形式来实现的MuEvent。象Atlas之类的框架,大多也采用类似的方法。