6 七 2011, 9:06上午
javascript:
by

2 点高见,马上去办~~

自定义事件(Custom Event) 一

这个东西早在YUI,jquery初始的版本里面已经包括了。

但是在Nodejs把它用得炉火纯青。

开始分析:事件机制是一套类似于这样的流程:

Event —-> Handler


在起初的应用,我们似乎已经习惯了原生的那些事件源。但是,当一个程序越来越复杂的时候,事件驱动成了一个项目设计流程中必不可少词眼的时候,这些原生的事件显得是如些的骨感,我们要让她丰满一些~~

幸运的是,js的原生机制中有这样一个方法

Arguments —-> Function


是不是太熟悉,以至忘了她的存在。这样一眼看上去,和事件的触发机制如此的相像,抛出一个argument和function绑定,然后执行就完美的模仿了Event的机制,但是更重要的是—-我们可以随意的定义事件源。

 

NodeJS的customer event设计了这样一套机制

Image(1)[4]

在一个我们将要操作元素上,绑定了一个_Events属性。在这个属性里存储key/value的字量面对象,这个字面量对象可以是一对一,多对一,多对多都是个可以。

这就实现了我们在自定义事件中的第一个逻辑:自定义事件的绑定

这个里面已经有了Object,Event(对应key),Handler(对应Value),很好的定义了自定义事情与回调函数的对应绑定关系。

这就是: EventEmitter.prototype.addListener所做的工作.维系一个自定义事件和回调函数的对应表。

然后就需要考虑怎么来触发自定义事件

我们来看 EventEmitter.prototype.emit

Image(2)

它是这样处理的,如果直接传入回调函数,根据其数量的不同分别用 Call 来绑定。对于传入的数组循环一下再绑定。

OK: 如此简单的代码就完成了一整套自定义事件

华丽的分割线:
___________________________________________________________________________________________

把arguments由Like-Array转变成真正的Array过程中,大量使用了Array.prototype.slice.call()这个方法,这个方法的输出很有意思

 

(function(){
    console.info(arguments);
    console.info(arguments.length);
    console.info(typeof(arguments));
    console.info(typeof([]));
    console.info(arguments.constructor);
    console.info([].constructor);
    console.info(Array.prototype.slice.call(arguments,1));
})("a","b","c","d")

输出结果是:

Image(3)

很有意思吧~

下一节带来,大量Custom Event的应用

没有看懂。。。

I am so Sad~~~

*name

*e-mail

web site

给点儿指导意见:


 
  • 我在说

  • 我在看

  • 新文章

  • 文章归档