js建立物件的幾種模式

2021-09-10 17:17:49 字數 2512 閱讀 7583

原理

在乙個函式內部完成建立物件新增屬性和方法。

缺陷

無法識別物件的型別。

佔記憶體,沒有提取公共方法。

例項:

function

createperson

(name, age, job)

;return o;

}var person1 =

createperson

("nicholas",29

,"software engineer");

var person2 =

createperson

("greg",27

,"doctor"

)}

原理

在建構函式中把屬相新增給this。

使用new 操作符建立物件的過程

建立乙個新物件;

將建構函式的作用賦給新物件(this 指向該物件)

執行建構函式中的**;

返回這個物件

缺點

5. 佔記憶體,沒有提取公共方法。

例項:

function

person

(name,age,***)

}var p1 =

newperson

('leo',25

,'man');

p1.sayhi()

;

原理

每個函式建立的時候都會生成乙個原型物件,原型物件中預設只有乙個屬性constructor 指向改函式本生。

每個建構函式的例項物件都有乙個屬性指向該原型物件!

給例項新增同名屬相只會新增乙個同名的例項屬相而不會修改原型屬性!!!

hasownproperty 檢視是否含有例項屬性。

object.getprototypeof() 可以獲取原型

object.getownpropertydescriptor() 獲取例項屬性

確定屬性是原型中的屬性:

function

hasprototypeproperty

(object, name)

for-in 迴圈時,返回的是所有能夠通過物件訪問的、可列舉的(enumerated)屬性;開發人員定義的屬性都是可列舉的。

object.keys() 返回乙個包含所有可列舉屬性的字串陣列

使用字面量會重寫原型需要自己重新指定構造方法。

原型上的引用屬性會被所有例項所共享。

最常用的模式

原理

在建構函式中私有定義屬性;在原型中定義公共屬性和方法。

為了解決 組合建構函式 建構函式和原型分開 的問題。

原理: 原型方法也放在建構函式內部;每次構建的時候判斷原型是否含有某個原型方法 如果沒有在宣告。

function

person

(name, age, job);}

}var friend =

newperson

("nicholas",29

,"software engineer");

friend.

sayname()

;

注意

使用動態原型模式時,不能使用物件字面量重寫原型。

原理

就是在工廠模式下 使用new 操作符。

使用情形

這個模式可以在特殊的情況下用來為物件建立建構函式。假設我們想建立乙個具有額外方法的特殊

陣列。由於不能直接修改 array 建構函式,因此可以使用這個模式

注意點

建構函式返回的物件與在建構函式外部建立的物件沒有什麼不同。為此,

不能依賴 instanceof 操作符來確定物件型別。由於存在上述問題,我們建議在可以使用其他模式的情

況下,不要使用這種模式。

不使用 this 和 new 是完全封裝的安全型別

function

person

(name, age, job)

;//返回物件

return o;

}var friend =

person

("nicholas",29

,"software engineer");

friend.

sayname()

;//"nicholas"

這樣,變數 friend 中儲存的是乙個穩妥物件,而除了呼叫 sayname() 方法外,沒有別的方式可

以訪問其資料成員。

JS中建立物件的幾種模式

created by sibuk on 2017 6 5.工廠模式 function createperson name,age,job return o var person1 createperson nicholas 29,software engineer var person2 creat...

細節 js 建立物件的幾種模式舉例

var sayname function function createperson name,age obj.name name obj.age age obj.sayname sayname return obj var newperson createperson oliver 18 cons...

建立物件的幾種模式

以後堅持一日一更,和大家分享我每天學習的成果及經驗,讓想要學習的小夥伴少走彎路。一 建構函式或字面量創單物件 這些方式有明顯的缺點 使用同乙個介面建立很多物件,會產生大量的重複 為了解決這個問題,出現了工廠模式。二 工廠模式 考慮在es中無法建立類 es6前 開發人員發明了一種函式,用函式來封裝以特...