JS學習筆記 OO疑問之物件建立

2021-09-06 18:11:06 字數 2079 閱讀 3331

一、引入工廠,解決反覆**

前面已經提到,

js中建立物件的方法,不難發現,主要的建立方法中,建立乙個物件還算簡單,假設建立多個類似的物件的話就會產生大量反覆的**。

解決:工廠模式方法(加入乙個專門建立物件的方法,傳入引數避免反覆)

function createobject(name,age);

return obj; //返回物件引用

};

二、引入建構函式,解決物件識別

上面方法儘管攻克了避免反覆**出現的問題,但也帶來了無法識別詳細物件的問題,方法內部使用

newo

bject

的方式,最後返回該物件引用,呼叫該方法建立的物件返回的所有都是

object

的引用,因此使用

typeof

或instanceof

操作符時都無法區分詳細物件。

解決:建構函式(改良後的工廠方法)

function box(name,age);

};

比較:細心的童鞋就該發現了,該方法與問一中的工廠模式不同之處就在於:省略了newobject()的明文執行過程;省略了

return

語句,這些都由後台自己主動執行。

而建構函式差別普通函式的地方在於其呼叫方式,必須用

new運算子或物件冒充方式呼叫。

問三、引入

prototype

屬性物件,解決物件之間的共享問題

每個物件都會有乙個

prototype

,同一時候它也是乙個物件。使用目的是為了解決共享問題,呼叫同乙個建構函式建立的該物件會共享

prototype

中的屬性和方法。

解決:使用原型模式解決共享

function box() {} //宣告乙個建構函式

box.prototype.name = 'lee'; //在原型裡加入屬性

box.prototype.age = 100;

box.prototype.run = function () ;

比較:

建構函式建立

使用原型建立

細節:在呼叫屬性或方法時,採用就近原則,先查詢例項中是否存在,否的話查詢原型,可使用isp

rototypeof

(),hasownp

rototy(),in

操作符進行相關測試。

問四、使用組合,解決共享及傳參

原型模式建立物件省略了建構函式傳參初始化的過程,這既是它的缺點又是它的長處,缺點是物件初始化的值一樣,而且假設原型屬性中包括有引用型別,則對乙個物件進行更改,其它物件的相應屬性也會跟著更改了。

解決:組合建構函式

+原型模式(解決共享和傳參的問題)

function box(name, age) ;

box.prototype =

};

細節:這樣的方式事實上就是將建構函式與原型一起使用,對要建立的物件分析,將須要共享的內容放入原型中,不須要的則放在建構函式裡。這樣也就是組合了。

優化:這樣分開式的寫法難免有些怪異,我們將這兩部分合併

動態原型模式(第一次呼叫共享方法時進行初始化原型,以後就不會初始化了)

function box(name ,age) ;}}

中結:在學習

js中,還是非常須要對正統物件導向語言的理解的,在這裡我們學習了使用建構函式以及原型來建立物件,理解了二者的概念,對於後面的

js中物件導向深入學習會非常有幫助,各種不同的建立方式是為了解決不同情況的問題,理解了這些才幹按需使用。

JS學習筆記 OO疑問之封裝

封裝是物件導向的基礎,今天所要學習的匿名函式與閉包就是為了實現js的物件導向封裝。封裝實現 封裝變數。提高資料 系統安全性。封裝正是物件導向的基礎。即沒有名字的函式。其建立方式為 function 單獨存在的匿名函式,無法執行,可通過賦值給變數呼叫或通過表示式自我執行來實現執行。1.賦值給變數為一般...

JS學習筆記 OO建立懷疑的物件

問了 工廠介紹,解決重碼 前面已經提到,js中建立物件的方法。不難發現,主要的建立方法中,建立乙個物件還算簡單,假設建立多個類似的物件的話就會產生大量反覆的 解決 工廠模式方法 加入乙個專門建立物件的方法,傳入引數避免反覆 function createobject name,age return ...

COBOL 學習筆記 之 疑問篇

1.cobol的年齡多大了?對於這個問題,稍微看看書,查查資料就可以了解得到。cobol是common business oriented language 的縮寫,直譯為通用商業語言。它主要用於解決商業和企業管理等領域的大量資料處理問題,又稱為企業管理語言 資料處理語言等。cobol語言的研製始於...