JS學習筆記 OO疑問之封裝

2021-09-07 06:08:33 字數 1938 閱讀 9303

封裝是物件導向的基礎,

今天所要學習的匿名函式與閉包就是為了實現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...