Extension Function (2): Multicast Event

In my previous blog 《Extension Function (1): Extend》 already extension "Function" function to implement Extend.

follow the lead i'll talk about extension "Function" to implement Multicast Event.

Some friends may familiar with listener model,Some friends may be not.

But event I believe these is no one none used.

In Js,We usually use blew code to implement event.

vareventDemoClass= 

function() {
//constructor
}
eventDemoClass.prototype = (function() {
//private
return{
//public
OnDoSomeStaff:null,
DoSomeStaff:function(){
// some function code
if(this.OnDoSomeStaff){
this.OnDoSomeStaff(object,args);
}
}
};
})();
varc=neweventDemoClass();
c.OnDoSomeStaff=function(){
alert("staff was done");
}
c.DoSomeStaff()

It's easy and effective when just only one function to regist.

But if we need regist multicast event as we used in c#.

what can we do?

As usual,here is the core code.

//注册事件方法
//@param eventName:事件名
//@param func:进行注册的方法
//@param executor:执行上下文对象 如果为空则使用默认上下文
Function.prototype.AddEventListener =
function (eventName, func, executor) {
    var eventFunc = function () {//多播事件执行关键方法
        var eventArray = arguments.callee.FunctionArray;
        var executorArray = arguments.callee.Executor;
        for (var i = 0; i < eventArray.length; i++) {
            var executor = executorArray[i];
            if (!executor) {
                executor = this;
            }
            eventArray[i].apply(executor, arguments);
        }
    }
    if (!this[eventName] || !this[eventName].FunctionArray) {
        this[eventName] = eventFunc;
        this[eventName].FunctionArray = [];
        this[eventName].Executor = [];
    }
    this[eventName].FunctionArray.push(func);
    this[eventName].Executor.push(executor);
}
//取消注册方法
//@param eventName:事件名
//@param funcHandle:取消注册的方法对象 如果不是注册时使用的原对象,
//将无法进行取消动作
Function.prototype.RemoveEventListener =
function (eventName, funcHandle) {
    if (this[eventName] && this[eventName].FunctionArray) {
        var index = this[eventName].FunctionArray.RemoveObject(funcHandle);
        if (index >= 0) {
            this[eventName].Executor.RemoveIndex(index);
        }
    }
}

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/prototype/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索方法
, function
, this
, executor
, 注册
, Executor接口
in.js
function event、js function event、function event对象、php function event、getevent function,以便于您获取更多的相关知识。

时间: 2024-08-30 08:06:40

Extension Function (2): Multicast Event的相关文章

Extension Function (1): Extend

The basic stone for writing good code is oo, and the most important feature for oo is implment. This is why I choose write about implement as my first tech article. No more to say.Just share my core code Function.prototype.Implement = function (paren

js键盘上下左右键怎么触发function

 这篇文章主要是对js键盘上下左右键怎么触发function 进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 代码如下: <script type="text/javascript">  function jumpPage() {      if (event.keyCode==37)//左  fun_a();  if (event.keyCode==38)//上  fun_b();  if (event.keyCode==39)//右  fun_c()

PostgreSQL 9.3 Event Trigger

PostgreSQL 9.3 将引入事件触发器, 与普通触发器不同的是, 事件触发器是数据库全局的触发器, 可以由DDL事件来触发. Unlike regular triggers, which are attached to a single table and capture only DML events, event triggers are global to a particular database and are capable of capturing DDL events.

火狐和ie下获取javascript 获取event的方法(推荐)_javascript技巧

javascript 获取event 先从一个简单的例子说起,一个简单的button控件如下: <input type='button' name='mybtn' id='mybtn' onclick='myFunc()'/> 然后为其注册事件,这样的情况,怎么在javascript里获取event呢,特别是firefox的情况.请看: <script type='text/javascript'> function myFunc(){ var ev = window.event

IE和firefox浏览器的event事件兼容性汇总_javascript技巧

1,关于event的用法 存在问题:IE中可以直接使用event对象,但是Mozilla不可以直接使用. 例如: <input type="button" value="clickMe" nclick="doIt()"> <script. language="javascript">      function doIt(){             alert(event);        } <

IE和Firefox下event事件杂谈_javascript技巧

因为javascript的事件模型有三种,它们分别是NN4.IE4+和W3C/Safari;这也造成了在不同的浏览器中处理event的差异,这里结合一些零碎的代码来说明如何做到event在IE4+和Firefox下的正常工作.首先看如下代码: 复制代码 代码如下: function doEventThing(eventTag){ var event = eventTag||window.event; var currentKey = event.charCode||event.keyCode;

深入解析PHP的Yii框架中的event事件机制_php技巧

事件事件可以将自定义代码"注入"到现有代码中的特定执行点.附加自定义代码到某个事件,当这个事件被触发时,这些代码就会自动执行.例如,邮件程序对象成功发出消息时可触发 messageSent 事件.如想追踪成功发送的消息,可以附加相应追踪代码到messageSent 事件. Yii 引入了名为 yii\base\Component 的基类以支持事件.如果一个类需要触发事件就应该继承 yii\base\Component 或其子类. Yii的event机制YII的事件机制,是其比较独特之处

js 事件处理函数间的Event物件是否全等_javascript技巧

这个小问题以前就遇到,却没有去总结 现在又遇到,为了得到准确结论,记录下来: 如题:同一事件 多个执行函数间的Event物件是否全等 例如: 复制代码 代码如下: dom.addEvent('click',fna); dom.addEvent('click',fnb); 1:在fna里对Event物件添加的属性,在其后执行的fnb函数里是对于Event物件是否能访问到? 2:执行fna/fnb函数时的Event物件是否全等 Eventfna===Eventfnb ? 标准的文档太长哪里是说明了这

深入解析PHP的Laravel框架中的event事件操作_php技巧

 有时候当我们单纯的看 Laravel 手册的时候会有一些疑惑,比如说系统服务下的授权和事件,这些功能服务的应用场景是什么,其实如果没有经历过一定的开发经验有这些疑惑是很正常的事情,但是当我们在工作中多加思考会发现有时候这些服务其实我们一直都见过.下面就事件.事件监听举一个很简单的例子你就会发现. ​ 这个例子是关于文章的浏览数的实现,当用户查看文章的时候文章的浏览数会增加1,用户查看文章就是一个事件,有了事件,就需要一个事件监听器,对监听的事件发生后执行相应的操作(文章浏览数加1),其实这种监