麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > JS > 正文

Javascript匿名函數的一種應用 代碼封裝

2024-09-06 12:45:34
字體:
來源:轉載
供稿:網友
在一些Javascript庫中可以看見這種寫法:
代碼如下:
(function(){
//所有庫代碼代碼
})();

說實話,對于js初學者的我來說。這個東西太嚇人了,在這些JS庫中,這個函數基本上把整個庫的所有代碼全括起來了,這種寫法完全超越了我的常識。難道不應該好好的劃分一下嗎,難道不應該體現出層次和功能劃分嗎,怎么會一個函數搞定呢。我一開始完全不敢去細想它的道理。直到使用JS一段時間后,某一天一位同事在閑聊時說起了這個問題,我才知道這個叫匿名函數。匿名函數我并不陌生,C#,Python,Lua中都有這個咚咚。我到網上去查了一下,介紹文章很多,也很詳細,但是我心頭的疑問卻沒有得到解決:為什么要這樣寫。
我找了一款著名的JS開源庫JQuery,他的代碼就是典型的以上寫法,在粗略看了他的代碼之后我發現這套代碼實在太大了太復雜了,實在不適合我。于是我轉而去看另外一個開源js庫swfobject,這個庫提供了簡單的接口把Flash控件嵌入到網頁中。這個代碼好多了,很短,很快就看完了。看完之后我恍然大悟,原來如此。真理就是如此簡單,之所以這樣寫,只有一個目的:封裝。
初學JS的時候,我問過同事,js怎么定義私有函數和變量。當時的得到的答案是:js不是面向對象的,不提供這些功能。我對這個答案也坦然接受了,畢竟嚴格的封裝并不是必要的。現在終于明白了,辦法總是有的,在不支持封裝的語言里同樣可以實現封裝。而實現的方法就是匿名函數。來看一段代碼:
代碼如下:
//定義
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的類定義方式。函數F相當于一個構造函數,而函數里面的其他定義都是函數私有的外部無法訪問,例如double函數。這樣就變相實現了私有方法。其他打上“this.”前綴的成員相當于公開成員,外部可以訪問。
而這些庫之所以要用一個大函數包裹整個庫代碼,就是為了不向使用者暴露內部方法和變量,強制用戶只能訪問開放的API。從這一點可以開出這些開發者的良苦用心。
到這里我不禁又要問了,js如何實現繼承呢。希望這一次的答案不要像上一次一樣:不支持。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久国产一| 又黄又爽又色无遮挡免费 | 欧美视频国产精品 | 369看片你懂的小视频在线观看 | 99在线热播精品免费 | 日本欧美一区二区三区在线播 | lutube成人福利在线观看污 | 亚洲码无人客一区二区三区 | 国产精品自拍99 | 久久久久久久久亚洲精品 | 成人在线网站 | 国产午夜精品久久久久 | 在线观看免费视频麻豆 | 中午日产幕无线码1区 | 国产一区二区三区高清 | 国产精品一区二区免费在线观看 | 成人h视频在线 | 成人毛片在线免费看 | 一级大黄毛片免费观看 | 久久久久久久久浪潮精品 | 色猫av | 日本a大片| 亚洲一区中文字幕 | 成人在线观看一区二区 | 三级xxxx| 二区三区四区 | 99热高清 | 午夜精品小视频 | 男女无套免费视频 | 日韩欧美电影在线观看 | 久久影院免费观看 | xnxx 美女19 | 日日操日日操 | 一区二区高清视频在线观看 | 狠狠干夜夜草 | 成人毛片100部 | 免费永久在线观看黄网 | 国产二区三区四区 | 欧日韩在线 | 国产一区在线观看视频 | 午夜小视频免费观看 |