用javascript实现“委托”

用javascript实现“委托” 

以前用.net比较多,近几年因为开发ajax项目,javascript也用了比较频繁,因为要实现一些客户端的架构,所以使用起来不像以前只是验证下表单,发现其实js也有一些比较高级的应用,以下就简单介绍一下js和.net有些相似的特性。

.net的一个高级特性“委托”,其实js也有类似的一个功能,不过没有人称之为“委托”,以前接触.net是学习委托时候,感觉有点难懂,后来因为js用多了,发现从js来理解委托是一个挺简单的事情,刚好今天看到了文野的“一点一点学ASP.NET”关于委托的介绍,我就用里面的内容作为.net的例子:

namespace  MyDelegateTest {      /// <summary>      /// 说明:一个简单的委托示例      /// 作者:文野      /// 联系:stwyhm.cnblogs.com      /// </summary>        // 新建一个用以输出消息的委托      public delegate void WriteMessage();            public class WriteToWeb      {          // 一个输出消息的静态方法          public static void StaticWrite()          {               HttpContext.Current.Response.Write("委托调用了一个静态方法。<br />");          }            // 一个输出消息的类实例方法          public void Write()          {               HttpContext.Current.Response.Write("委托调用了一个类实例方法。<br />");          }      } } 调用: protected   void  Page_Load( object  sender, EventArgs e)      {          // 新建一个委托,回调函数是一个静态方法          WriteMessage wm = new WriteMessage(WriteToWeb.StaticWrite);            WriteToWeb w = new WriteToWeb();          // 新建一个委托并与加到先前建立的委托组成委托链,回调函数是一个类实例方法          wm += new WriteMessage(w.Write);            // 执行委托链上所有的回调函数          wm();     }
这个例子相当简单明了,定义一个委托,一个类,这个类下面有两个方法,然后用委托的方法分别调用这个类下面的两个方法,这个例子用js可以很简单的实现。 首先先说一下关于js的一些知识,js的变量类型除了string,int,object等,function也是一种类型,用法和其他类型一样,没有分别,js的这个特性有时很有用,一些需要回调或者不同的模块和条件下调用不同的方法,特别是一些大型的ajax项目会更多使用到,可以使各个模块之间封装起来,耦合更少,以下是js的实现方法:
//  实现一个类似委托特性的类(js里面function可以相当于一个类),add方法相当于运算符"+"重载,run相当执行委托链上所有的回调函数 function  delegate(func){      this .arr  =   new  Array();  //  回调函数数组      this .add  =   function (func){          this .arr[ this .arr.length]  =  func;     };      this .run  =   function (){          for ( var  i = 0 ;i < this .arr.length;i ++ ){              var  func  =   this .arr[i];              if ( typeof  func  ==   " function " ){                 func();  //  遍历所有方法以及调用             }         }     }      this .add(func); } //  定义一个类,同样包括两个方法 function  WriteToWeb(){      this .Write  =   function (){         alert( " 委托调用了一个类实例方法。 " );     }; } WriteToWeb.StaticWrite  =   function (){     alert( " 委托调用了一个静态方法。 " ); }; //  新建一个委托 var  WriteMessage  =   new  delegate(WriteToWeb.StaticWrite); //  新建一个WriteToWeb实例 var  w  =   new  WriteToWeb(); //  添加委托组成委托链 WriteMessage.add(w.Write); //  执行委托链上所有的回调函数 WriteMessage.run();
通过以上可以很清楚,其实委托的本质就是把函数当作变量参数来传递,当然.net的委托远比这里的js实现的复杂。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值