fangzhongteng 发表于 2013-2-4 23:18:21

JS模拟委托

模拟C#中的委托,写了一个委托的类,原理:
创建一个委托列表管理Add进来的方法
<html xmlns="http://www.w3.org/1999/xhtml"><head>    <title></title>    <script type="text/javascript">      var delegate1 = function() {            //委托的方法列表            var ArrayFuction = [];            //添加方法,相当于+=            this.AddF = function(f) {                if (typeof (f) === "function") {                  ArrayFuction.push(f);                }                else {                  throw new Error("委托只能接受方法");                }            };            //移除方法,相当于-=            this.RemoveF = function(f) {                if (typeof (f) === "function") {                  var length = ArrayFuction.length;                  for (var i = 0; i < length; i++) {                        if (ArrayFuction == f) {                            ArrayFuction = ArrayFuction.splice(i, 1);                        }                  }                }                else {                  throw new Error("委托只能接受方法");                }            };            //调用委托下所有方法            this.Run = function() {                for (var item in ArrayFuction) {                  ArrayFuction();                }            }      }      var del = new delegate1();      function aa() {            alert("添加进入了");      }      function bb() {            alert("添加2");      }      del.AddF(aa);      del.AddF(bb);      del.RemoveF(1);      del.Run();                            </script></head><body></body></html>
页: [1]
查看完整版本: JS模拟委托