封裝是物件導向的基礎,
今天所要學習的匿名函式與閉包就是為了實現js的物件導向封裝。封裝實現、封裝變數。提高資料、系統安全性。封裝正是物件導向的基礎。
即沒有名字的函式。其建立方式為
function
()單獨存在的匿名函式,無法執行,可通過賦值給變數呼叫或通過表示式自我執行來實現執行。
1.賦值給變數為一般的函式使用方式
var run = function()
;alert(run());
2.通過表示式自我執行
(function(
arguments
可選))(
arguments);
在乙個普通函式的內部。建立乙個匿名函式,匿名函式可訪問普通函式中的變數。進而實現類似於物件導向中封裝的特性,這個匿名函式就叫做相應普通函式的閉包。閉包就是對外建立的介面,通過介面達到訪問函式內部變數的效果。
function
run() ;}//
alert(
username
);//
錯誤usern
ameis not defined
alert(run()());
特點:閉包中使用的區域性變數會駐留在記憶體中,避免了使用全域性變數造成的命名衝突等情況的發生。
值得注意的是閉包中使用this
keyword。指向的是
window
物件。
為了更好的安全性、資料保護。則須要對資料進行私有化的封裝,而
js中沒有塊級作用域的概念(即出了
{}的範圍。仍能夠訪問宣告的變數),但有了前面的基礎,我們就能夠達到像其它正規物件導向語言的封裝效果。
function user()
})();
alert(i); //此處無法訪問變數i
} //私有作用域取代全域性變數
(function())(); //匿名函式執行完成後,變數馬上銷毀
//訪問私有變數
function user();
//對外提供介面。間接訪問內部成員
this.userlearn = function();
} var user = new user()
alert(user.userlearn());
//實現get()、set()
function user(value)
this.setuser = function(value)
} var user = new user('forrest');
alert(user.getuser());
user.setuser('li');
alert(user.getuser());
//靜態私有變數
(function();
user.prototype.getuser = function();
user.prototype.setuser = function(value);
})();
//字面量方式的私有化
function normaluser(){}
var user = function();
var nu = new normaluser();
nu.userlearn = function();
return nu;
}();
alert(user.userlearn());
結語:
js雖不是一門正統的物件導向的語言,但用它也能達到物件導向的封裝、繼承、多型等的效果。學習起來還是須要好好理解的,特別是對於使用
js不是特別多的人來說,僅僅能等到以後的逐步應用來解決這一系列的問題,更進一步體會它在物件導向方面的應用。
JS學習筆記 OO疑問之物件建立
問 一 引入工廠,解決反覆 前面已經提到,js中建立物件的方法,不難發現,主要的建立方法中,建立乙個物件還算簡單,假設建立多個類似的物件的話就會產生大量反覆的 解決 工廠模式方法 加入乙個專門建立物件的方法,傳入引數避免反覆 function createobject name,age return...
COBOL 學習筆記 之 疑問篇
1.cobol的年齡多大了?對於這個問題,稍微看看書,查查資料就可以了解得到。cobol是common business oriented language 的縮寫,直譯為通用商業語言。它主要用於解決商業和企業管理等領域的大量資料處理問題,又稱為企業管理語言 資料處理語言等。cobol語言的研製始於...
vue學習之JS封裝
我是乙個菜鳥還需努力,一起都是自己觀點,不喜勿噴。匯入js檔案有很多種方式,我喜歡使用這種,感覺跟框架匯入很相似。沒有多餘的沉湎。定義乙個js檔案,比如util.js import vue from vue stringutil const stringutil if text.length tex...