成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript 鉤子機(jī)制

開發(fā) 前端
我們討論過使用委托方法,把所有的回調(diào)函數(shù)注冊到一個數(shù)組變量中,然后集中處理數(shù)組變量中的函數(shù),這樣就不會出現(xiàn)后面的函數(shù)沖擊前面的函數(shù)問題。——因為原來回調(diào)函數(shù)就一個。

介紹

今天大家開會共同解決了一些javascript方面的問題,大家一起想辦法,最終大家選擇了鉤子機(jī)制。

我把整個過程與大家分享一下,如果有誤,請大家指正。 

問題

是這樣的:我們的代碼已經(jīng)歷史很久了,就這一套框架已經(jīng)快5年了,在這中間大家也沒有標(biāo)準(zhǔn)的代碼規(guī)范,很隨意的進(jìn)行了代碼編寫,所以出現(xiàn)了很多問題:

1、如制造了很多重復(fù)的輪子。一套方法在多個文件中出現(xiàn),大家調(diào)用的也五花八門,所以同事在一個方法(登錄)中添加邏輯的時候發(fā)現(xiàn),多個地方都有這樣登錄操作,修改起來非常麻煩。

2、代碼結(jié)構(gòu)混亂,分工不明確,本來公共類做的事情,導(dǎo)航類也做了類似的操作。

3、回調(diào)函數(shù)的使用,出現(xiàn)多個回調(diào)函數(shù),從而出現(xiàn)一個回調(diào)函數(shù)會覆蓋前一個回調(diào)函數(shù)的情況。

前兩個問題,我首先把所有的入口文件(調(diào)用登錄的方法)統(tǒng)一使用公共類中的方法,并且是一個入口一個入口的進(jìn)行驗證,保證代碼的安全性、穩(wěn)定性。并且不刪除原有的方法,害怕有遺漏。然后計劃是一個月之后,再進(jìn)行一次全站搜索看是否有人還使用其他接口,然后刪除那些重復(fù)的方法。

下面主要討論第三個問題的解決方法。

委托方法

我們討論過使用委托方法,把所有的回調(diào)函數(shù)注冊到一個數(shù)組變量中,然后集中處理數(shù)組變量中的函數(shù),這樣就不會出現(xiàn)后面的函數(shù)沖擊前面的函數(shù)問題。——因為原來回調(diào)函數(shù)就一個。

下面是具體的代碼過程

 [[79008]]定義全局變量

  1. <head>  
  2.        <script type="text/javascript">  
  3.               var calls = [];       </script>  
  4. </head> 

[[79008]]注冊方法

  1. function need_register(){  
  2. }  
  3. function test(){  
  4.       calls.push('need_register');  

  [[79008]]最終執(zhí)行注冊代碼   

  1. function callback(){  
  2.      var calls = calls || [];  
  3.      if(calls.length === 0) return false;  
  4.      for(var i=0, iLen = calls.length; i < iLen; i++){  
  5.              calls[i].apply();  
  6.       }  
  7. }  

問題:

1、我們不難發(fā)現(xiàn)我們必須要有全局變量calls,我們知道全局變量不管在什么語種中都是最難維護(hù)的,因為到處都有可能修改里面的值,或改變整個全局變量。

2、在注冊時候我們會在多個地方在calls中注冊"函數(shù)名稱",將來如果其他開發(fā)人員,看見這個變量會一頭霧水的。——東一榔頭,西一棒子。

總結(jié):所以最終我們決定放棄這個方法。想出了下面的方法,我們管它叫鉤子機(jī)制,也許名稱上有點不夠直觀,呵呵大家就權(quán)當(dāng)學(xué)習(xí)整個方法吧。

#p#

鉤子機(jī)制

鉤子機(jī)制是這樣的,大家按照某一規(guī)則寫一個方法(這個規(guī)則在方法名稱上),然后頁面加載完之前,統(tǒng)一執(zhí)行所有的鉤子函數(shù)。

注意callHooks方法,里面的局部變量s就是鉤子函數(shù)名稱中一定要有的內(nèi)容。——這是使用鉤子的方法!

  1. // 處理鉤子的對象  
  2. var hook = (function(){  
  3.     return {  
  4.         timer:null,  
  5.         init:function(){  
  6.             this.callHooks('init');  
  7.         },    
  8.         callHooks:function(init){  
  9.             var s = "hook_" + init + '_event',  
  10.             f = [];   
  11.             for(var h in window){  
  12.                 if(h.indexOf(s) != 0) continue;  
  13.                 f.push(h);  
  14.             }     
  15.             this.hooksTimeout(f);  
  16.         },    
  17.         hooksTimeout:function(hooks){  
  18.             if(0 === hooks.length){  
  19.                 if(this.timer) clearTimeout(this.timer);  
  20.                 return;  
  21.             }     
  22.  
  23.             var h = hooks.shift();  
  24.             window[h].apply();  
  25.             window[h] = undefined;  
  26.  
  27.             window.setTimeout(this.hooksTimeout(hooks), 200);  
  28.         }     
  29.     }     
  30. }());  
  31.  
  32. // 鉤子1  
  33. var hook_init_event_tpl_html = function(){  
  34.     document.getElementById('test').innerHTML = 'This is HTML!';  
  35. }  
  36.  
  37. // 鉤子2  
  38. var hook_init_event_tpl_console = function(){  
  39.     console.log('This is console!');  
  40. }  
  41.  
  42. // ***在頁面加載完之前調(diào)用,也就是在window.onload()之前  
  43. hook.init(); 

總結(jié)

很多問題,如果大家一起討論是很有幫助的,在這過程中我們能學(xué)到很多東西,我們也可以在這過程中從牛人身上學(xué)到很多方法和思維過程,幾乎每次的技術(shù)討論會我都有不菲的收獲——我不知道這是不是傳說中的“頭腦風(fēng)暴”。

原文鏈接:http://www.cnblogs.com/baochuan/archive/2012/06/11/2542048.html

【編輯推薦】

  1. JavaScript馬賽克遮罩圖片幻燈片切換類
  2. 對開發(fā)者非常有用的JavaScript庫
  3. 網(wǎng)易郵箱前端JavaScript編碼規(guī)范
  4. javascript解決圖片縮放及其優(yōu)化
  5. 看JavaScript如何實現(xiàn)頁面自適
責(zé)任編輯:張偉 來源: 川山甲的博客
相關(guān)推薦

2011-08-24 13:51:56

JavaScript

2022-04-25 09:03:16

JavaScript代碼

2011-06-07 08:58:31

javascript

2011-07-04 13:12:04

JavaScript

2019-10-11 09:00:00

JavaScriptEvent Loop前端

2024-06-21 08:32:24

2011-01-18 14:06:58

JavaScriptweb

2021-12-07 08:01:33

Javascript 垃圾回收機(jī)制前端

2010-07-14 09:55:27

JavaScript

2018-03-15 16:45:47

前端JavaScriptthis

2018-08-07 14:45:52

編程語言JavaScripthtml

2015-03-06 09:00:23

Java高度關(guān)注內(nèi)存使用機(jī)制

2025-05-09 01:30:00

JavaScript事件循環(huán)基石

2017-02-06 07:34:26

JavaScrip

2016-12-05 09:26:34

2020-09-21 09:58:01

Frida

2021-03-28 09:17:18

JVM場景鉤子函數(shù)

2023-06-19 08:23:28

kubernetes容器

2023-11-10 16:31:31

2009-08-12 10:29:31

C#實現(xiàn)全局鉤子
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美亚洲成人网 | 91精品国产一区 | 欧美精品91爱爱 | 久久久91精品国产一区二区三区 | 欧美性受 | 国产精品一区二区无线 | 亚洲午夜av久久乱码 | 中文字幕成人 | 91精品国产91久久久久游泳池 | 韩国av一区二区 | 午夜国产羞羞视频免费网站 | 欧美日韩中文字幕 | 免费在线一区二区三区 | 1级毛片| 日韩视频在线一区二区 | 欧美日韩亚洲国产 | 羞羞视频免费在线 | 亚洲国产二区 | 国产精品高潮呻吟久久 | 天天欧美| 97视频在线观看免费 | 婷婷色婷婷 | 中文字幕免费视频 | 久久久亚洲精品视频 | 午夜影晥 | av免费网站在线观看 | 免费观看av网站 | 日本免费一区二区三区 | 国产成人免费视频网站视频社区 | 国产高清在线视频 | 一区日韩| 亚洲第一福利网 | 古装三级在线播放 | 亚洲啊v在线| 亚洲一区二区三区视频在线 | 欧美亚洲一级 | av黄在线观看| 精品欧美一区二区三区久久久 | 欧美日韩久久久 | 精品视频久久久久久 | 久久伊人精品一区二区三区 |