JavaScript建立物件的5種模式

2021-09-17 02:57:39 字數 3187 閱讀 5842

物件導向的語言有乙個標誌,即擁有類的概念,抽象例項物件的公共屬性與方法,基於類可以建立任意多個例項物件,一般具有封裝繼承多型的特性!

但js中物件與純物件導向語言中的物件是不同的,ecma標準定義js中物件:無序屬性的集合,其屬性可以包含基本值、物件或者函式。

可以簡單理解為js的物件是一組無序的值,其中的屬性或方法都有乙個名字,根據這個名字可以訪問相對映的值(值可以是基本值/物件/方法)。

建立物件交給乙個工廠方法來實現,可以傳遞引數,但主要缺點是無法識別物件型別,因為建立物件都是使用object的原生建構函式來完成的。

function createperson(name, age, job) 

return o; // 使用return返回生成的物件例項

}var person = createperson('jack', 19, 'software engineer');

function person(name,age,job)

}var person1 = new person('jack', 19, 'software engineer');

var person2 = new person('liye', 23, 'mechanical engineer');

建構函式模式與工廠方法區別在於:

上述由person建構函式生成的兩個物件person1與person2都是person的例項,因此可以使用instanceof判斷,並且因為所有物件都繼承object,因此person1 instanceof object也返回真:

console.log(person1 instanceof person); // true;

console.log(person2 instanceof person); // true;

console.log(person1 instanceof object); // true;

console.log(person2 instanceof object); // true;

console.log(person1.constructor === person2.constructor); // ture;

雖然建構函式方式比較不錯,但也存在缺點,那就是在建立物件時,特別針對物件的屬性指向函式時,會重複的建立函式例項,以上述**為基礎,可以改寫為:

function person(name,age,job)

function getname()

js中每個函式都有乙個prototype(原型)屬性,這個屬性是乙個指標,指向乙個物件,它是所有通過new操作符使用函式建立的例項的原型物件。

原型物件最大特點是,所有物件例項共享它所包含的屬性和方法,也就是說,所有在原型物件中建立的屬性或方法都直接被所有物件例項共享。

function person() {}

person.prototype.name = "jack";

person.prototype.age = 29;

person.prototype.getname = function ()

var person1 = new person();

var person2 = new person();

console.log(person1.getname === person2.getname); // ture;

目前最為常用的定義型別方式,是組合建構函式模式與原型模式。

建構函式模式用於定義例項的屬性,而原型模式用於定義方法共享的屬性

這樣,每個例項都會有自己的乙份例項屬性的副本,但同時又共享著對方方法的引用,最大限度的節約記憶體。此外,組合模式還支援向建構函式傳遞引數,可謂是集兩家之所長。

function person(name, age, job) 

person.prototype =

}var person1 = new person('jack', 19, 'software engneer');

person1.lessons.push('biology');

var person2 = new person('lily', 39, 'mechanical engneer');

console.log(person1.lessons); // ["math", "physics", "biology"]

console.log(person2.lessons); // ["math", "physics"]

console.log(person1.getname === person2.getname); // true

組合模式中例項屬性與共享方法(由原型定義)是分離的,這與純物件導向語言不太一致。

動態原型模式將所有構造資訊都封裝在建構函式中,同時又保持了組合的優點。

其原理就是通過判斷建構函式的原型中是否已經定義了共享的方法或屬性,如果沒有則定義,否則不再執行定義過程。

該方式只定義一次原型上方法或屬性,且將所有構造過程都封裝在建構函式中,對原型所做的修改能立即體現所有例項中:

function person(name, age, job) 

if (typeof this.getname)

}}var person1 = new person('jack', 19, 'software engneer');

person1.lessons.push('biology');

var person2 = new person('lily', 39, 'mechanical engneer');

console.log(person1.lessons); // ["math", "physics", "biology"]

console.log(person2.lessons); // ["math", "physics"]

console.log(person1.getname === person2.getname); // true

javascript物件的建立

function createoject name,return object var aa createoject zhangsan nan aa.run 利用第一種方式的問題就是不能識別他是什麼物件 function myobject name,var testobect new myobjec...

JavaScript物件的建立

var person new object person.name cjh person.age 19 var person 需要注意的是,花括號內,成員與成員之間以逗號隔開,而最後乙個成員後不能跟逗號,否則會在ie7及更早的版本中報錯。成員名也可以直接使用字串。其一大優點是可以向函式傳遞大量引數。...

JavaScript建立物件

一 建立單個物件 方式一 object建構函式 var o new object o.key value 方式二 物件字面量 方式一和二缺點 使用相同的介面建立很多物件會產生大量重複 使用方式三解決 方式三 工廠模式 使用函式封裝以特定介面建立物件的細節 function createobject ...