我们平时在使用 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的动作行为内,是没有基于这样的概念的。在此本人略做补充! |