<!--  
    description:JS类中event的简单实现
    code by Lonsan on 2005
    email:Lonsan21@163.com

    请各位多批评指导,谢谢
-->
< html >
< head >
< title >  JS Event  </ title >
< style >
</ style >
</ head >

< body >
</ body >
</ html >

< script  language ="javascript" >
<!--
//实现,实现类似C#风格调用
function RaiseEvent(sender,event)
{
    event.replace(/^undefined|null|\s+/,"");
    eval("var f = function(sender){\n"+event+"\n}");
    f(sender);
}
function EventHandler(o)
{
    this.delegate = "\n";

    //function
    if(typeof o=="function")
    {
        this.delegate += o.toString().match(/function([^\0\(]*)\(/)[1] + "(sender);\n";
    }
    //function name
    else if(typeof o=="string" && /^[a-z\$]*[0-9a-z]+$/i.test(o))
    {
        this.delegate += o + "(sender);\n";
    }
    //function code
    else if(typeof o=="string")
    {
        this.delegate += o + ";\n";
    }
    //else
    else
    {
        //do nothing
    }

    return this.delegate;
}
EventHandler.prototype.toString = function()
{
    return this.delegate;
}


//示例
function Persion(){}
Persion.prototype.onBeginSpeak;
//也可有默认事件,优先进行处理
Persion.prototype.onEndSpeak = new EventHandler(DefaultEvent);
Persion.prototype.name="Lonsan";
Persion.prototype.Speak = function(sWords)
{
    RaiseEvent(this, this.onBeginSpeak);

    alert("正在讲话。。。\n以下是讲话内容:\n"+sWords);

    RaiseEvent(this, this.onEndSpeak);
}

var p = new Persion()

//事件挂接,可以挂接多个
p.onBeginSpeak += new EventHandler(BeginSpeak1);
p.onBeginSpeak += new EventHandler(BeginSpeak2);
p.onEndSpeak += new EventHandler("EndSpeak");
p.onEndSpeak += new EventHandler("alert('讲话结束了,大家散场吧。');");

p.Speak("大家好");

function BeginSpeak1(sender)
{
    alert("处理BeginSpeak事件!--1\n讲话者:"+sender.name);
}
function BeginSpeak2(sender)
{
    alert("处理BeginSpeak事件!--2");
}
function EndSpeak(sender)
{
    alert("处理EndSpeak事件!");
}
function DefaultEvent(sender)
{
    alert("EndSpeak的默认事件处理。");
}
//-->
</ script >

转载于:https://www.cnblogs.com/Lonsan/archive/2005/04/07/js.html

JS类中event的简单实现相关推荐

  1. 深度拷贝时,类中的非简单类型字段

    2019独角兽企业重金招聘Python工程师标准>>> public class Test implements Cloneable {private String id;priva ...

  2. 类中匿名函数如何从 event 中去除

    匿名函数在各种event中如鱼得水的到处使用. 可是 把attach 到 Event  中的这些匿名函数 detach 是一个恼人的问题. 不建议在类的内部做一个 List<fn> , 这 ...

  3. 对于怎么理解js中Event Loop,你可以看这篇文章

    javascript中event loop是什么 声明 源文档地址 介绍 如何你跟我一样的话,那么你一定会爱上javascript!虽然它不是一种比较完美的编程语言,但是严格地说,还有其它比javas ...

  4. 利用JS弹出层实现简单的动态提示“正在加载中,请稍等...

    最近项目中大量用到了JQuery中的Ajax异步加载数据,数据量非常大,导致每次加载的时候都感觉到非常非常慢,让客户体验非常不好,就想到用JS做一个简单的提示. JQuery版本:1.7.1: 编写一 ...

  5. 利用JS弹出层实现简单的动态提示“正在加载中,请稍等...”

    JQuery版本:1.7.1: 编写一个JS类(ck.layer.js): [javascript] view plaincopy /********************************* ...

  6. js代码中可以有java的对象吗_js原型对象与Java类的区别

    标签: 在我学习Javascript的原型对象时,我总是不自觉地拿Java的类思想来做比较,时间久了,我渐渐认识到二者有巨大的不同. 首先,类是不能直接当方法来运行,它最简便的方式是调用其静态方法:而 ...

  7. js中的json ajax,js结合json实现ajax简单实例

    这篇文章主要为大家详细介绍了js结合json实现ajax简单实例的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 前期准备 1.安装wampserver或者其他相似软件来搭建本地集成安装环 ...

  8. frida hook java 函数_使用 Frida 来 Hook Java 类中的构造函数(构造函数带重载),获取解密后的js脚本...

    一个APP使用了Auto.js 的加密脚本.我们的任务是将其加密脚本进行解密并dump出来.在  https://www.52pojie.cn/thread-1112407-1-1.html 一文中, ...

  9. KSO-c#中 event事件的简单使用

    定义 事件是一种特殊的多播委托,仅可以从声明事件的类或结构(发布服务器类)中对其进行调用. 如果其他类或结构订阅该事件,则在发布服务器类引发该事件时,将调用其事件处理程序方法. 有关详细信息和代码示例 ...

最新文章

  1. Python机器学习:训练Tesseract
  2. Win10控制桌面图标显示
  3. pbr 多出口_结合BFD基于PBR的多出口流量转发的控制与备份
  4. 简单快速安装Apache+PHP+MySql服务环境(三)—— 下载安装phpmyadmin
  5. 西门子scl语言编程手册_西门子SCL编程PEEK指令讲解
  6. python杀死了excel_Python杀死了Excel|自动更新表格,告别繁琐
  7. leetcood学习笔记-204-计算质数
  8. 第一 二章 计算机基础知识,[精品]第二章-计算机基础知识.doc
  9. yield关键字 C#
  10. 希腊字母在数学或物理中代表的意思各是什么
  11. 人人网惨遭全网下架,但是我并不同情他!
  12. 激光雷达考试基础知识
  13. java文件的命名_java命名规范
  14. 用计算机拜年祝福语,新年大吉拜年短信 适合春节发的祝福语说说
  15. 加拿大主教大学计算机世界排名,加拿大大学计算机专业排名
  16. Android修行手册 - ConstraintLayout示例
  17. S3DIS数据集学习笔记
  18. zurb是什么网站_Zurb的Tribute库的Vue.js包装器,用于本机@mentions
  19. 阿里云企业发展史中的重大事件一览
  20. Sun Jan 05 2020 00:00:00 GMT 0800 (中国标准时间) 时间转换为 2020-01-05 08:00:00

热门文章

  1. K2 工作流_携手捷普:让流程立于云端,臻于至上_全球领先的工作流引擎
  2. Linux进程间通信详解
  3. Visual SLAM笔记
  4. 结构化软件设计的具体步骤
  5. 使用ngrok进行域名映射
  6. python c++情侣网名是什么意思_c++和Python的选择?
  7. Html(快捷键!+Tab)
  8. My SQL 创建数据库
  9. 润和软件推出HarmonyOS物联网系列模组Neptune,助力Harmony生态
  10. 使用Java随机产生四位字母作为验证码