Javascript 高階 封裝

2021-09-07 11:06:16 字數 724 閱讀 3705

js中處處是物件,物件導向的第一步當然就是封裝了。由於js中沒有類的概念,所以封裝起來也比較麻煩。以下介紹兩種js的封裝。

1、使用約定優先的原則,將全部的私有變數以_開頭

看完**。是不是有種被坑的感覺。只把全部的變數以_開頭,事實上還是能夠直接訪問的,這能叫封裝麼。當然了。說了是約定優先嘛,這樣的方式還是不錯的。最起碼成員變數的getter。setter方法都是prototype中,並不是存在物件中。整體來說還是個不錯的選擇。假設你認為。這不行,必須嚴格實現封裝。那麼看另外一種方式。

2、嚴格實現封裝

看上面的**。去掉了this.屬性名,嚴格的實現了封裝,只能通過getter,setter訪問成員變數了。可是存在乙個問題,全部的方法都存在物件中,新增了記憶體的開銷。

3、以閉包的方式封裝

上述**。js引擎載入完後,會直接執行student = 馬上執行函式,然後此函式返回了乙個子函式,這個子函式才是new student所呼叫的建構函式,又由於子函式中保持了對馬上執行函式中checkno(no) ,times的引用,(非常明顯的閉包)所以對於checkno和times,是全部student物件所共同擁有的,建立3個物件後,times分別為0,1。2 。

這樣的方式的優點是,能夠使student中須要復用的方法和屬性做到私有且物件間共享。

JavaScript高階 原型

1.什麼是原型 原型是 js 中非常特殊乙個物件,當乙個函式建立之後,會隨之就產生乙個原型物件,當通過這個函式的建構函式建立了乙個具體的物件之後,在這個具體的物件中就會有乙個屬性指向原型。第一種狀態 定義了乙個物件 function person 第二種狀態,這樣賦值就會賦在原型物件中 使用原型來給...

javascript 高階用法

為什麼 typeof 不靠譜,無法將陣列從物件中區分出來,instanceof 有特殊情況,在iframe存在的情況下無法判斷另乙個iframe內的陣列 如何做 object.prototype.tostring call arr 特點 鏈式的settimeout在有定時器時不會新增到等待佇列而是繼...

javascript 高階用法

為什麼 typeof 不靠譜,無法將陣列從物件中區分出來,instanceof 有特殊情況,在iframe存在的情況下無法判斷另乙個iframe內的陣列 如何做 object.prototype.tostring call arr 特點 鏈式的settimeout在有定時器時不會新增到等待佇列而是繼...