JS建立物件的方法

2021-08-17 03:44:26 字數 1858 閱讀 2416

es5中沒有類的概率,我們要建立許多同型別物件時需要使用其他方法來實現

工廠模式

工廠模式其實就是通過定義乙個普通函式,利用函式來建立物件,物件的屬性都是通過函式引數傳遞的

function

createperson

(name,age,job)

}var person1=createperson('zzh',21,'student');

var person2=createperson('ly',22,'student');

優點:簡單。通過函式封裝**,減少了**量

缺點:通過函式建立的物件並不能被識別是哪一型別的物件(不能用instanceof檢測出具體物件型別)。

建構函式模式

我們建立的陣列或物件其實都是通過建構函式來建立的,js提供了內建的建構函式array、object、function。這些內建的建構函式有自己的原型物件來提供屬性和方法讓例項繼承。

我們可以自定義建構函式

function

person(name,age,job)

}var person1=new person('zzh',21,'student');

var person1=new person('ly',22,'student');

console.log(person1 instanceof person) //true

和工廠模式的不同:

用new方法建立person例項有以下幾步

建立乙個新物件

將建構函式的this繫結到新建立的物件上

執行建構函式中的**(為新物件新增屬性)

返回新物件

建構函式的優缺點

優點:簡單、並且能為例項標識為一種特定型別

缺點:建立物件例項時會重複建立一些共享的屬性和方法(如上面的sayname方法會每次都建立)

原型模式

針對建構函式模式的缺點,又有一種新的模式出現

像上面的sayname方法在每個物件例項都存在,而建構函式模式在建立物件例項時會重複建立sayname方法。解決的方法可以將sayname方法定義成全域性函式,然後在建構函式中引用這個方法即可。

不過又產生了新的問題:定義過多的全域性變數可能會造成命名衝突也會占用過多資源(全域性變數的作用域和生存期都在整個程式執行過程中)

我們引用了原型的概念

每個函式都有乙個原型物件,這個原型物件的作用就是儲存需要共享的屬性和方法,物件例項通過原型鏈可以繼承原型物件的屬性和方法。這樣就不用重複去建立那些要共享的屬性和方法了。

function

person()}

var person1=new person();

var person2=new person();

//person1和person2都會繼承person的原型

優點:解決了共享屬性重複建立的問題

缺點:當原型物件儲存引用型別的值時,在乙個物件例項中改變這個值會影響所有物件例項中此引用型別的值(因為所有物件例項都是引用的同一記憶體位址)。

組合模式

很少有單獨使用原型模式的。大多數情況都是組合使用建構函式模式和原型模式。

需要共享的屬性和方法定義在函式的原型物件上,而物件例項特有的就定義在建構函式中

function

person

(name,age,job)

person.prototype=

}

js建立物件方法

1.物件字面量 let xys console.log xys.age 22 2.使用new操作符和建構函式 1.系統內建物件 var obj1 new object var obj2 new array 建立乙個陣列物件 var obj2 new date 建立乙個日期物件 var obj3 ne...

JS幾種建立物件的方法

1.工廠模式 function person name,age,job return o var person person zhangsan 23 web 2.建構函式模式 function person name,age,job var person1 new person dy 23,web ...

js物件導向,多種建立物件方法!

開始建立物件 1.物件字面量。var clock clock.showtime 呼叫 2.建立object例項 var clock new object clock.hour 12 clock.minute 10 clock.showhour function clock.showhour 呼叫 由...