Javascript 的面向事件的设计中,使用对象指针实例

Javascript 专栏收录该内容
0 篇文章 0 订阅

Javascript 的面向事件的设计中,使用对象指针实例

我们平时在使用 IE 的基于事件动作(behavior),常用到以下语法:
Object.attachEvent(sEvent, fpNotify),
其中”sEvent”是“行为名称”,”fpNotify”是指向引用的方法名

如 , button.attachEvent(”onclick”, onBtnClick),,则表示,对于”button”这个对象,产生一个事件叫”onclick”,其所引用的方法是 function “onBtnClick”。在这里,IE是引用基于事件的思想设计这个动作。这就形成Jscrpt的一个特性,面向事件驱动。关于面向事件驱动,网上已经有很多文章,我也不在这里详说。现在关键就是怎么关联面向对象和事件的设计。

先看以下代码:

// --------------------------------------------------------------------------------------------------------------------------------

<script language="JavaScript" type="text/javascript">
/**
 *
 * @author Bill Vison
 * @date 2006-05-10
 */

function ExampleMethod() {
 /**
  * 建立方法监听保存对
  */
 var listenerMethods = new Array();
 
 /**
  * 新增方法映射监听
  */
 function addListener(listenerName , methodReference) {
  var listObj = new Object();
  listObj.name = listenerName;
  listObj.reference = methodReference;
  listenerMethods.push(listObj);
 }
 this.addListener = addListener;
 
 
 
 
 this.doIt = function() {
  var input = new Object();
  var output = new Object();
  
  var refMethod;
  
  try {
   for (var i = 0 ; i < listenerMethods.length ;i++) {
    if (listenerMethods[i].name == "ref") {
     refMethod = listenerMethods[i];
    }
   }
   

   if (refMethod == null || refMethod == "undefined") {
    throw  "没有定义事件方法!";
   }
   refMethod.reference.call(refMethod.reference,this,input,output); 
  } catch (e) {
   alert(e);
  }
 }
 
 /**
  * 设置 测试方法一
  */
 this.sayMorning = function() {
  alert("good morning!");
 } 
 
}


// --------------------------- 建立映射方法
function refer(refMe) {
 // refMe 指向当前对象的向针
 refMe.sayMorning();
}


// ---------------------------- 运行对象
var examMeth = new ExampleMethod();

// 加入监听
examMeth.addListener("ref",refer);

// 执行方法
examMeth.doIt();

</script>

 

我们可以看到,我们加入一个监听器 refer ,它用 “ref”这个名称进行关连,当我们执行 doIt()方法时,就会调用 refer 动件函数,里面就会调用”refMe.sayMorning();”这个方法。而 “refMe”则代表指针 “ExampleMethod” 的 this作用。

这样,我们就可以在对象的事件内,使用对象的指针。而在 IE的动作行为内,是没有基于这样的概念的。在此本人略做补充!

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值