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

2021-09-07 02:19:09 字數 2055 閱讀 3952

問了、工廠介紹,解決重碼

前面已經提到,

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 createobject name,age return...

物件導向 OO 的程式設計 建立物件

為了避免大量重複 產生,可採用以下方法建立物件 1 function createperson name,age,job 89 var person1 createperson bob 23,doctor 10var person2 createperson lily 21,student 其實就是...

JS學習筆記 OO疑問之封裝

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