国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

javascript事件模型代碼

2024-09-06 12:41:58
字體:
來源:轉載
供稿:網友
本節稍稍深入地討論關于事件處理的話題,如果你對模式、閉包和面向對象等概念還不太理解,不妨暫且等閱讀完相關內容之后再回過頭來閱讀它,相信你會有很大收獲。

1 事件處理模式

       在程序設計領域,“事件處理”是一種模式,當一個對象受外部影響而改變狀態時,通過消息的方式將這個狀態改變通知給這個對象或者相關聯的某個對象,讓它執行對應的動作,這就是事件處理的基本原理。負責通知狀態改變的對象被稱作“消息”,而執行響應動作的屬性則被稱作“事件代理”。
       例如下面就是一個簡單的事件處理模式的應用:

function dispatchEvent(owner, eventType, eventArgs)
{
 if(owner && owner["on"+eventType])
   setTimeout(function(){owner["on"+eventType](eventArgs)}, 1);
}

function randomSerials(len)
{
 function randomSignal()
 {
   return Math.random() > 0.5 ? 1 : 0;
 }
 var ret = [];
 for(var i = 0; i < len; i++)
 {
   ret.push(randomSignal());
 }
 return ret;
}

function Differ(obl)
{
 var buffer = new Array(obl);
 var time = 0;

 this.readBuffer = function()
 {
   var buf = buffer;

   buffer = new Array(obl);
   time = 0;

   return buf;
 }

 this.bufferSize = function()
 {
   return obl;
 }

 this.input = function(serials)
 {
   for(var i = 1; i < serials.length; i++)
   {
       var signal = Math.abs(serials[i] - serials[i - 1]);
       buffer[time++ % obl] = signal;
       if(signal) 
         dispatchEvent(this, "signalchange", 
{input:serials, time:time, buffer:buffer.slice(0)});
   }
 }
}

var inputSerials = randomSerials(20);
alert(inputSerials);
var diff10 = new Differ(20);
diff10.input(inputSerials);
alert(diff10.readBuffer());

diff10.onsignalchange = function(eventArgs)
{
 alert(eventArgs.time);
}

diff10.input(inputSerials);

在上面的例子中,函數dispatchEvent負責分派事件,onsignalchange是事件代理,在這個差分系統diff10中,當輸入信號的電平發生變化(從0到1或者從1到0)時,觸發相應的事件onsignalchange,并且將當前輸入信號、時序和當前輸出緩存作為事件參數傳入事件處理程序。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陈巴尔虎旗| 商水县| 凉山| 丹寨县| 同心县| 清镇市| 鄂托克前旗| 厦门市| 白城市| 孝感市| 柳江县| 夏河县| 周宁县| 镇平县| 余干县| 台江县| 越西县| 郴州市| 义乌市| 平凉市| 岳普湖县| 台北市| 丰都县| 崇仁县| 梨树县| 夏津县| 锦州市| 龙岩市| 兴宁市| 镇巴县| 广平县| 梁山县| 河南省| 沧州市| 介休市| 增城市| 北辰区| 新巴尔虎左旗| 玛沁县| 阿勒泰市| 南涧|