快速业务通道

Javascript框架的自定义事件

作者 佚名技术 来源 网页制作 浏览 发布时间 2012-03-07
t.addEventListener(name, wrapper, false); } else { element.attachEvent("on" + name, wrapper); } return element; } // 调用方式 document.observe("dom:loaded", function() { console.log("Init: 1"); DOES_NOT_EXIST++; }); document.observe("dom:loaded", function() { console.log("Init: 2"); });

看把 Prototype 的作者给乐的 :-/

-- Split --

在本人看来,原文的作者表述的技术点,除了如何创建健壮的回调系统外,其实还有两条。

其一,就是如何保证在出现异常的时,继续运行期望的代码;其二,就是如何创建互不干扰的“运行环境”。

原文提到的 createEvent 和 setTimeout 都是好办法,只是处理原作者所言在回调系统中,的确使用 createEvent 会比较合适。setTimeout 相对应的详细信息,可移步到 Realazy 兄的相关文章。

而即使出错也能继续运行期望的代码,其实可以考虑使用 finally 语句,下面是个例子:

var callbacks = [
  function() { console.log(0); },
  function() { console.log(1); throw new Error; },
  function() { console.log(2); },
  function() { console.log(3); }
];

for(var i = 0, len = callbacks.length; i < len; i++) {
    try {
        callbacks[i]();
    } catch(e) {
        console.info(e); // 获得异常信息
    } finally {
        continue;
    }
}

这一灵感同样来自 Dean Edwards 文章后的回复,在这里也贴下吧:

function iterate(callbacks, length, i) {
    if (i >= length) return;

    try {
        callbacks[i]();
    } catch(e) {
        throw e;
    } finally {
        iterate(callbacks, length, i+1);
    }
}

最后,留个小问题。谁知道上述的代码中,留言者提出的为什么异常到最后才打印出来不?

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号