国产探花免费观看_亚洲丰满少妇自慰呻吟_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,并且將當前輸入信號、時序和當前輸出緩存作為事件參數傳入事件處理程序。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丰都县| 莲花县| 吉安市| 滨海县| 福泉市| 霍林郭勒市| 武乡县| 梓潼县| 丹巴县| 柘荣县| 呼图壁县| 凌源市| 平阴县| 铁岭县| 佛坪县| 馆陶县| 乳源| 甘孜| 古丈县| 卫辉市| 华亭县| 阿鲁科尔沁旗| 黑水县| 呼伦贝尔市| 都昌县| 台中市| 凤庆县| 上饶县| 邻水| 施秉县| 兴义市| 清镇市| 屯昌县| 崇文区| 积石山| 海淀区| 吴忠市| 丰原市| 隆化县| 昭觉县| 怀安县|