Javascript模塊模式學習分享

之前一直也有聽說和接觸到模塊模式、這次整理了一下、感覺蠻有收獲的、特來分享。

模塊模式很基本的一點就是匿名函數的 閉包、通過這點來實現。

 1 //模塊模式
 2 
 3 var MODULE = (function(){
 4      /*函數默認是返回this的、但是定義了my對象后、return my; 返回值就變成了my對象、然后賦值給MODULE,它具有了my的所有屬性和方法,也擁有了匿名函數里面的私有函數*/
 5     var my = {},
 6         _age;
 7 
 8     /*
 9 
10     //這個是錯的、C++里面的思想帶過來了
11     my.setAge = function(age){
12         age = age;
13     } 
14 
15     */
16 
17     my.setAge = function(tmp){
18         age = tmp;
19     };
20 
21     my.getAge = function(){
22         console.log(age);
23     };
24 
25     return my;
26 }());
27 
28 
29 MODULE.setAge(2);
30 MODULE.getAge();

下面這種是我以前寫的、所以決定略略有點傻

 1 // 模塊模式自己的方式
 2 //我也不確定這個叫不叫模塊模式、私有成員確實是包起來了、前者是返回的對象、可以直接調用、
 3 //這邊返回的是函數、需要new 之后創建一個實例才能使用、所以兩者的差距感覺還是有的
 4 //但是從繼承方面考慮、前一種方式繼承起來可能不是很靈活、而下一種方式可以用到很多 蠻炫的繼承方式、
 5 
 6 var MODULE1 = (function(){
 7     var age;
 8 
 9     return function(){
10         this.getAge = function(){
11             console.log(age);
12         }
13         this.setAge = function(tmp){
14             age = tmp;
15         }
16     }
17 }());
18 
19 /*
20 這個是錯的
21 MODULE1().setAge(2);
22 MODULE1().getAge();
23 */
24 var a = new MODULE1();
25 a.setAge(3);
26 a.getAge();
1 //模塊模式可以很好的利用變量導入、更靠的維護全局變量
2 var b = (function($){
3     // do something  插件開發里面這個貌似經常使用
4 }(jQuery));

?

模塊模式的擴展

 1 //模塊的擴展
 2 //這一種是我的很挫B的方式  
 3 MODULE.weight = 1;
 4 MODULE.setWeight = function(tmp){
 5     weight = tmp;
 6 };
 7 
 8 MODULE.getWeight = function(){
 9     console.log(weight);
10 };
11 
12 MODULE.setWeight(100);
13 MODULE.getWeight();
14 
15 
16 //這一種感覺很牛逼、確實很牛逼、我的方式比較散亂、他的擴展內容都用一個東西包起來、更加易于維護、值得好好學習
17 
18 var MODULE = (function(my){
19     //這里可以添加噼里啪啦各種內容
20     my.gf = "You";
21     //var gf = "You";
22     my.getGf = function(){
23         //這里寫成 console.log(gf) 在Nodejs里面會報錯 這應該很好理解、gf的話它調用的是這個匿名函數里面的私有成員、而my.gf是屬于my的公有的、gf在閉包里面
24         //如果寫成 var gf = “You”  那寫成 console.log(gf); 就不會錯了、
25         //如果用var gf的話 gf就變成了一個私有成員   用my.gf的話就變成了公有成員、兩種方式各自取舍、看個人
26         //所以建議是使用 var gf' 我注釋掉的那種方式、不然setGf這種函數毛用
27         console.log(my.gf);
28     };
29     my.setGf = function(tmp){
30         gf = tmp;
31     };
32 
33     // and so on
34     return my;
35 }(MODULE) || {});
36 
37 
38 MODULE.getGf();

//那篇牛文中的緊擴展 類似于繼承中的 c.klass = p.prototype

?

保留一個對父對象的引用、在這里面就是保持一個對于原模塊的引用

復制和繼承方面、采用第一種方式的模塊比較疼、因為利用hasProperty()的擴展是基于引用的、改變一者另外一者也會改變

而采用我的那種搓逼的 function new的方式、利用繼承不會造成這種影響、這是個優點

var MODULE = (function (my) {var old_moduleMethod = my.moduleMethod;my.moduleMethod = function () {// method override, has access to old through old_moduleMethod...
      //這是原文作者的這段代碼、他的old_moduleMethod應該也只能在這里面調用了吧? 等my.moduleMethod被重載完、那個old_moduleMethod就沒有意義了...不知道是不是
};return my; }(MODULE));

?

原文作者的那個跨文件的私有狀態真的很牛逼、學習了

__seal,__unseal的鎖的思想、帥氣

1 //子模塊就沒有講的必要了、
2 MODULE.xxx = (function(){
3     var you = {};
4 
5     //噼里啪啦
6     return you;
7 }());

?

?

很搓比的過完一遍、有錯誤的希望看到的多多指正、正在學習之中、

附原文作者牛逼鏈接http://blog.jobbole.com/40409/

轉載于:https://www.cnblogs.com/lizhug/archive/2013/05/31/3110058.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259723.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259723.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259723.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Source Insight基本使用和快捷鍵

為什么要用Source Insight呢?貌似是因為比完整的IDE要更快一些,比較利于查看大量的代碼。 軟件的安裝很簡單,設置好安裝目錄。 配置好文檔路徑,當然這個也可以在Options里面改,選Options->Preferences…里面的Folde…

powerquery mysql數據庫_window 10 下 --excel | power query 通過 ODBC鏈接 mysql 數據庫

excel鏈接到mysql的方法有幾種,今天主要介紹如何通過ODBC鏈接odbc是 “開放數據庫連接”,你可以通過下載插件使得自己的excel可以連接到不同的數據庫。關于版本的選擇,就是excel版本obdc版本mysql obdc版本(需要一樣)第一步 下載mysql odbc…

table樣式

一直以來&#xff0c;css和JS都是軟肋&#xff0c;因為需要不得不重新溫故。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style type"text/css">table.hover…

MAC和XCODE常用快捷鍵

摘自&#xff1a;http://www.cnblogs.com/yjmyzz/archive/2011/01/25/1944325.html 1. 文件CMD N: 新文件CMD SHIFT N: 新項目CMD O: 打開CMD S: 保存CMD SHIFT S: 另存為CMD W: 關閉窗口CMD SHIFT W: 關閉文件2. 編輯CMD [: 左縮進CMD ]: 右縮進CMD CTRL LEFT: …

數組與內存控制

注&#xff1a;我已對本文章進行了更新&#xff0c;勞煩移步。 java語言是典型的靜態語言&#xff0c;因而&#xff0c;數組也是靜態的&#xff0c;即當該數組被初始化之后&#xff0c;該數組的長度是不可變的。java 語言的數組變量是引用類型&#xff0c;什么意思呢&#xff1…

NRedis-Proxy - 高性能中間件服務器

2019獨角獸企業重金招聘Python工程師標準>>> 高性能中間件服務器 一、 NRedis-Proxy 介紹 NRedis-Proxy 是一個Redis中間件服務&#xff0c;第一個Java 版本開源Redis中間件&#xff0c;無須修改業務應用程序任何代碼與配置&#xff0c;與業務解耦&#xff1b;以Spr…

python圖片識別驗證碼軟件_python識別圖片驗證碼

http://robertgawron.blogspot.hk/2010/11/almost-all-sites-use-images-with-text.html圖片的識別主要有&#xff0c;去色&#xff0c;減噪&#xff0c;去線&#xff0c;分割&#xff0c;二值化&#xff0c;提取特征碼這里比較方便的是使用tesseract1&#xff0c;準備庫apt-ge…

POJ_1253勝利的大逃亡

這道題使用BFS做的&#xff0c;剛開始有點不太理解為什么使用隊列&#xff0c;一旦遇到可以到達終點的節點就立即返回&#xff0c;找到最短時間&#xff0c;最后明白了&#xff0c;因為在隊列里的所有節點一定比隊頭節點 的時間長。下面是具體代碼&#xff1a; #include<std…

博客搬家算法偽碼

已有平臺&#xff1a;CSDN博客、51CTO、博客園、WordPress不同平臺的博客&#xff0c;數據解析方式不一樣&#xff0c;數據抓取和存儲都是類似的。1.確定博客首頁地址a.平臺地址比如&#xff0c;CSDN的博客地址是 http://blog.csdn.net/b.賬號fansunionCSDN某個用戶的地址是&am…

用js做分頁,點擊下一頁時,直接跳到了最后一頁——Number()的妙用

Number()的妙用 Number()是javascript中將字符型轉換為數值型的函數&#xff1b;問題描述&#xff1a;做分頁&#xff0c;用js實現&#xff0c;獲取當前頁面的值&#xff0c;然后js自加1&#xff0c;可是點擊下一頁時&#xff0c;直接跳到最后一頁。選擇跳轉到某頁的時候&#…

讓Apache支持Wap網站

日前搭建一臺Wap網站&#xff0c;環境為RedHat EL5ApachePHPMysql&#xff0c;要求支持wml文件。現將涉及到的配置修改記錄如下&#xff1a;1、修改Apache的httpd.conf文件&#xff0c;增加如下內容。AddType application/x-httpd-php .wmlAddType text/vnd.wap.wml .wml;chars…

vue傳中文標點_vue項目引入第三方高德地圖實現標點定位

vue項目中&#xff0c;高德地圖使用。引入vue中。異步導入vue中。gaoDe(key) {window.onApiLoaded function () {var map new AMap.Map(container, {resizeEnable: true,center: [113.951955, 22.530825],zoom: 16});}var url https://webapi.amap.com/maps? v1.4.15&k…

CVE-2014-4877 wget: FTP Symlink Arbitrary Filesystem Access

目錄 1. 漏洞基本描述 2. 漏洞帶來的影響 3. 漏洞攻擊場景重現 4. 漏洞的利用場景 5. 漏洞原理分析 6. 漏洞修復方案 7. 攻防思考 1. 漏洞基本描述 0x1: Wget簡介 wget是一個從網絡上自動下載文件的自由工具&#xff0c;支持通過HTTP、HTTPS、FTP三個最常見的TCP/IP協議下載&am…

java判斷某個字符串是否是數字

&#xff08;一&#xff09;利用正則表達式判斷某個字符串是否是數字 public static boolean isNumeric(String s) {// 正則表達式return (s.matches("\\d*") && Pattern.compile("[0-9]*").matcher(s).matches());} &#xff08;二&#xff09;利…

mysql-nt.exe w3wp.exe cpu 100%_w3wp.exe(IIS ) CPU 占用 100% 的常見原因及解決辦法

對于IIS管理員來說&#xff0c;經常會碰到Web服務器CPU占用100%的情況&#xff0c;以下是個人的日常工作總結和一些解決辦法&#xff0c;主要用來剖析w3wp.exe(IIS )占用CPU 100%的一些原因 和解決方案&#xff0c;希望能對你有所幫助w3wp.exe的解釋:全名&#xff0c;IIS Appli…

TOP結果詳解

2019獨角獸企業重金招聘Python工程師標準>>> TOP前5行 top - 16:24:25 up 284 days, 4:59, 1 user, load average: 0.10, 0.05, 0.01 top 當前時間、系統啟動時間、當前系統登錄用戶數目、平均負載&#xff08;1分鐘,10分鐘,15分鐘&#xff09;。平均負載&#x…

BZOJ3236 [Ahoi2013]作業

昨天晚上做的。。。差錯一直查到今天 最后沒辦法問管理員要了數據才知道原來ans數組開小了233&#xff0c;簡直沙茶 這道題不就是裸的莫隊嘛 ||| 只要用樹狀數組維護當前的兩種個數即可。 1 /**************************************************************2 Problem: 3…

mysql ddl dml 導出_MySQL:DDL和DML語句,弄明白了嗎?

語句分類DDL&#xff08;Data Definition Languages&#xff09;語句&#xff1a;即數據庫定義語句&#xff0c;用來創建數據庫中的表、索引、視圖、存儲過程、觸發器等&#xff0c;常用的語句關鍵字有&#xff1a;CREATE,ALTER,DROP,TRUNCATE,COMMENT,RENAME。增刪改表的結構D…

敏捷水手——單體法到微服務之旅

\本文要點\\探究持續四年多的漸進式改革是什么樣子&#xff1b;\\t探索為什么在變革軟件和組織設計時要遵循康威定律&#xff1b;\\t看看如何將領導力應用到不同的團隊、領域和層級&#xff1b;\\t舉例說明變革管理如何依賴于理念和一貫的長遠目標&#xff1b;\\t了解從職能型團…

SQLCMD的介紹

SQLCMD的介紹 原文:SQLCMD的介紹文章轉載自&#xff1a;http://blog.sina.com.cn/s/blog_3eec0ced0100mhm2.html最近經常用到超過80M *.sql文件的導入問題。上網找了一下&#xff0c;發現超過80M的文件是不能在查詢分析器中執行的。找了些解決方案&#xff0c;個人感覺最簡單的…