最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript匿名函數(shù)的一種應(yīng)用 代碼封裝

 更新時間:2010年06月27日 01:41:30   作者:  
說實話,對于js初學者的我來說。這個東西太嚇人了,在這些JS庫中,這個函數(shù)基本上把整個庫的所有代碼全括起來了,這種寫法完全超越了我的常識。
在一些Javascript庫中可以看見這種寫法:
復制代碼 代碼如下:

(function(){
//所有庫代碼代碼
})();

說實話,對于js初學者的我來說。這個東西太嚇人了,在這些JS庫中,這個函數(shù)基本上把整個庫的所有代碼全括起來了,這種寫法完全超越了我的常識。難道不應(yīng)該好好的劃分一下嗎,難道不應(yīng)該體現(xiàn)出層次和功能劃分嗎,怎么會一個函數(shù)搞定呢。我一開始完全不敢去細想它的道理。直到使用JS一段時間后,某一天一位同事在閑聊時說起了這個問題,我才知道這個叫匿名函數(shù)。匿名函數(shù)我并不陌生,C#,Python,Lua中都有這個咚咚。我到網(wǎng)上去查了一下,介紹文章很多,也很詳細,但是我心頭的疑問卻沒有得到解決:為什么要這樣寫。
我找了一款著名的JS開源庫JQuery,他的代碼就是典型的以上寫法,在粗略看了他的代碼之后我發(fā)現(xiàn)這套代碼實在太大了太復雜了,實在不適合我。于是我轉(zhuǎn)而去看另外一個開源js庫swfobject,這個庫提供了簡單的接口把Flash控件嵌入到網(wǎng)頁中。這個代碼好多了,很短,很快就看完了。看完之后我恍然大悟,原來如此。真理就是如此簡單,之所以這樣寫,只有一個目的:封裝。
初學JS的時候,我問過同事,js怎么定義私有函數(shù)和變量。當時的得到的答案是:js不是面向?qū)ο蟮?,不提供這些功能。我對這個答案也坦然接受了,畢竟嚴格的封裝并不是必要的?,F(xiàn)在終于明白了,辦法總是有的,在不支持封裝的語言里同樣可以實現(xiàn)封裝。而實現(xiàn)的方法就是匿名函數(shù)。來看一段代碼:
復制代碼 代碼如下:

//定義
function F(x)
{
this.x = x;
function double(x){return x*x;}
this.getDoubleX(){
return double(this.x);
}
}

//使用
f = new F(12);
alert(f.getDoubleX());


上面的代碼很簡單,我沒有去運行它。懂點js的都知道這是JS的類定義方式。函數(shù)F相當于一個構(gòu)造函數(shù),而函數(shù)里面的其他定義都是函數(shù)私有的外部無法訪問,例如double函數(shù)。這樣就變相實現(xiàn)了私有方法。其他打上“this.”前綴的成員相當于公開成員,外部可以訪問。
而這些庫之所以要用一個大函數(shù)包裹整個庫代碼,就是為了不向使用者暴露內(nèi)部方法和變量,強制用戶只能訪問開放的API。從這一點可以開出這些開發(fā)者的良苦用心。
到這里我不禁又要問了,js如何實現(xiàn)繼承呢。希望這一次的答案不要像上一次一樣:不支持。

相關(guān)文章

  • 使用JavaScript獲取URL中的參數(shù)(兩種方法)

    使用JavaScript獲取URL中的參數(shù)(兩種方法)

    這篇文章主要介紹了使用JavaScript獲取URL中的參數(shù)(兩種方法)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • 詳解javascript高級定時器

    詳解javascript高級定時器

    這篇文章主要介紹了javascript高級定時器,針對javascript的代碼隊列進行詳細解析,感興趣的小伙伴們可以參考一下
    2015-12-12
  • javascript parseInt 大改造

    javascript parseInt 大改造

    還隱約記得第一次遇到 parseInt這個詭異問題的時候,以為發(fā)現(xiàn)了IE的BUG,興奮不已。
    2009-09-09
  • 后端要求formdata傳參前端該怎么處理詳解

    后端要求formdata傳參前端該怎么處理詳解

    這篇文章主要介紹了前端如何使用FormData對象進行數(shù)據(jù)傳參,包括創(chuàng)建FormData對象、添加數(shù)據(jù)、發(fā)送請求等步驟,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-03-03
  • Js中安全獲取Object深層對象的方法實例

    Js中安全獲取Object深層對象的方法實例

    Object是JavaScript基本數(shù)據(jù)類型之一(function也屬于object,是特殊的object),其存儲于堆中,這篇文章主要給大家介紹了關(guān)于Js中安全獲取Object深層對象的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • js創(chuàng)建對象的方式總結(jié)

    js創(chuàng)建對象的方式總結(jié)

    這篇文章主要介紹了js創(chuàng)建對象的方式,實例總結(jié)了3種常用的創(chuàng)建對象的方式,非常實用,需要的朋友可以參考下
    2015-01-01
  • 深入了解JavaScript阻塞渲染

    深入了解JavaScript阻塞渲染

    阻塞渲染就是在頁?中我們通常會引?外部?件,?瀏覽器在解析HTML頁?是從上到下依次解析、渲染,如果<head>中引?了?個a.js?件,?這個?件很?或者有問題,需要2秒加載,那么瀏覽器會停?渲染頁?,2秒后加載完成才會繼續(xù)渲染,這個就是阻塞
    2022-06-06
  • 原生js獲取瀏覽器窗口及元素寬高常用方法集合

    原生js獲取瀏覽器窗口及元素寬高常用方法集合

    本文主要介紹了原生js獲取瀏覽器窗口及元素寬高常用方法。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • JS動態(tài)高度虛擬列表實現(xiàn)原理解析

    JS動態(tài)高度虛擬列表實現(xiàn)原理解析

    這篇文章將和大家一起探討一下動態(tài)高度虛擬列表原理并指出常見虛擬列表采用累計高度方式存在缺點,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-11-11
  • JS實現(xiàn)常見的TAB、彈出層效果(TAB標簽,斑馬線,遮罩層等)

    JS實現(xiàn)常見的TAB、彈出層效果(TAB標簽,斑馬線,遮罩層等)

    這篇文章主要介紹了JS實現(xiàn)常見的TAB、彈出層效果,包括TAB標簽,斑馬線,遮罩層等.以完整實例總結(jié)分析了JavaScript實現(xiàn)tab切換、隔行變換及彈出遮罩層的完整實現(xiàn)技巧,需要的朋友可以參考下
    2015-10-10

最新評論

茌平县| 伊春市| 镇平县| 吉林省| 邢台市| 吴忠市| 德昌县| 滦平县| 诸城市| 噶尔县| 马边| 依兰县| 宜都市| 东安县| 山阴县| 鄂伦春自治旗| 阆中市| 成都市| 焦作市| 咸宁市| 泉州市| 获嘉县| 绍兴市| 巴彦淖尔市| 鄯善县| 元阳县| 广东省| 德惠市| 公安县| 泾源县| 天镇县| 吴旗县| 钟祥市| 宜川县| 汽车| 惠水县| 武汉市| 蚌埠市| 康保县| 苍梧县| 阜新市|