1.什么是對象?
ECMA-262把對象定義為:“無序屬性的集合魄揉,其屬性可以包含基本值、對象或者函數(shù)汤善∈膊”對象的每個屬性或函數(shù)都有一個值,我們可以把對象看成一組無序的名值對红淡。
1.對象的創(chuàng)建方法
創(chuàng)建一個簡單的對象實例:
var cat=new Object();
cat.name="花花"不狮;
cat.age=3;
cat.showName=function(){
alert(this.name);
};
上面的代碼創(chuàng)建了一個名為cat的對象,并給它添加了兩個屬性(name和age)和一個方法(showName)在旱。showName方法用于顯示this.name(將被解析為cat.name)的值摇零。這是以前程序員創(chuàng)建對象的一種方法,現(xiàn)在對象字面量成為創(chuàng)建這種對象的首選桶蝎,前面的例子用對象字面量語法可以這么寫:
var cat={
name:"花花"驻仅,
age:3谅畅,
showName:function(){
alert(this.name);
}
};
雖然Object構造函數(shù)和對象字面量都可以用來創(chuàng)造單個對象,但是這種方式有一個嚴重的缺陷噪服,使用同一接口創(chuàng)建多個對象毡泻,會產生大量重復代碼。為了解決這種問題粘优,人們開始使用對象的創(chuàng)建模式仇味。
2.對象創(chuàng)建之工廠模式
工廠模式是軟技領域一種很常用的設計模式,這種模式抽象了對象建立的過程雹顺〉つ考慮到js中沒有類的概念,開發(fā)人員發(fā)明了一種函數(shù)嬉愧,用來封裝以特定接口創(chuàng)建對象的細節(jié)贩挣。如下代碼:
function createObject(name,age){
var o=new Object();
o.name=name;
o.age=age没酣;
o.showName=function(){
alert(this.name);
};
return o;
}
var cat1=createObject("花花",3);
var cat2=createObject("小黑",4);
函數(shù)createObject()可以接受的參數(shù)來構建一個含有必要信息的cat對象王财,每次調用這個對象它都會返回一個包含兩個屬性和一個方法的對象。工廠模式解決了創(chuàng)建多個相似對象的問題裕便,但卻沒有解決對象識別的問題(即怎么知道一個對象的類型)搪搏。下節(jié)講的構造函數(shù)模式就解決了這個問題。