所謂工廠模式,就是建立乙個工廠方法,將建立物件的過程用乙個函式進行封裝,即放到工廠方法中,並且在這個函式(工廠方法)內進行物件的初始化,最終返回這個物件。如:
function createperson(name,age)
return o; //最後返回這個物件
}
工廠模式的優點: 每次建立物件的時候只需呼叫一下工廠方法即可,其解決了批量建立多個相似物件**復用性的問題;
工廠模式的缺點: 通過工廠模式建立的物件都是object型別,所以存在物件識別問題;
2. 建構函式模式建立物件
所謂建構函式模式,就是通過宣告乙個建構函式,建構函式內部顯式的建立物件,也不顯式返回物件,而是通過this來進行物件的初始化,然後通過new + 建構函式的方式來建立物件。如:
function person(name,age)
}
建構函式模式的優點:其解決了物件識別問題,不同的建構函式建立的物件屬於不同的物件例項;
建構函式模式的缺點:物件中的方法**每次建立物件都會重新建立一遍,這就造成了記憶體的浪費;
3. 原型模式建立物件
所謂原型模式,就是定義乙個空的建構函式,然後通過給建構函式的prototype原型物件新增屬性和方法的方式來建立物件;
function person()
/*在原型物件上新增屬性和方法*/
person.prototype.name = "even";
person.prototype.age = 27;
person.prototype.sayname = function()
原型模式的優點:因為物件的屬性和方法都定義在了建構函式的prototype原型物件上,而原型上的屬性和方法為所有物件共用,只會建立一遍,所以解決了物件中方法**每次都重新建立一遍的問題。
原型模式的缺點:因為物件的屬性和方法都是共用的,所以其省略了物件的初始化過程,所有物件的預設值都是一樣的,並且如果原型的屬性值是乙個引用型別,那麼某個物件對其進行更改,所有物件都會被影響。
4. 建構函式和原型模式混合模式建立物件
所謂混合模式,就是在建構函式中定義物件的例項屬性,在原型中定義方法和共享的屬性。
function person(name,age)
/*在原型中定義方法*/
person.prototype.sayname = function()
混合模式的優點:因為每個例項物件都擁有乙份屬性自己的例項屬性,同時又共享著方法的引用,所以可以最大限度的節省記憶體,是建立物件的好方式。
混合模式的缺點:建構函式和原型的定義處於分離狀態,沒有封裝在一起,違背了封裝的特性。
5. 動態原型模式建立物件
所謂動態原型模式,就是將原型的定義放到建構函式內從而實現封裝。如果直接將原型的定義放到建構函式內,那麼會產生乙個弊端,就是每次建立物件,建構函式內的原型定義都會被初始化一次,所以需要對其進行判斷,如果原型已經初始化,那麼就不再進行初始化了。如:
function person(name,age)
}}
在第一次建立物件的時候,this.sayname並不存在是undefined,所以其不等於function,然後給person的原型物件上新增乙個sayname()方法,下次建立物件的時候就不會重新初始化了。
這種方式非常完美。
6. 寄生構造模式建立物件
所謂寄生建構函式模式,就是定義乙個建構函式,但是這個建構函式內不使用this進行初始化,而是將建立物件的**封裝到這個建構函式內,裡面的**和工廠模式一模一樣,其和工廠模式的唯一區別就是,建立物件的時候是使用new + 建構函式的方式去建立物件,所以寄生建構函式模式其實就是工廠模式和建構函式模式的結合,就是將工廠模式中的**放到建構函式內,然後像建構函式那樣去使用。如:
function person(name,age)
return o;
}
寄生建構函式模式通常用於在不修改某個建構函式的情況下擴充套件該建構函式,間接給該建構函式新增新的功能,即專門為js原生的建構函式新增新的方法,如:
我們想要乙個具有額外功能的陣列,讓這個陣列可以直接呼叫某個方法就能輸出乙個用特定符號連線的字串,因為我們不能直接去修改array建構函式,所以我們只能通過寄生建構函式的方式來實現,如:
function specialarray()
return arr;//最後返回這個有特殊功能的物件
}var specialarray = new specialarray("red","blue","green");
alert(specialarray.topipedstring());
寄生建構函式模式的缺點:就是使用計算建構函式模式建立的物件和建構函式之間沒有什麼關係,因此instanceof操作符對這種物件沒什麼意義。
7. 穩妥構造模式建立物件
所謂穩妥建構函式模式,就是沒有公共屬性,而且方法也不引用this,建立物件的時候也不使用new,而是像工廠方法一樣使用,所以穩妥建構函式模式適用於不能使用this和new的安全環境中使用,如:
function person(name,age)
return o;
}var friend = person("even",27);
alert(friend.name);//無法獲取到name屬性
friend.sayname();//even
穩妥建構函式模式的優點:通過穩妥建構函式建立的物件其是乙個穩妥物件,其屬性只能通過對外暴露的方法來訪問,直接通過點屬性的方式是無法訪問到的,可以保證物件中原始資料的安全性;
穩妥建構函式模式的缺點:使用穩妥建構函式模式建立的物件和建構函式之間沒有什麼關係,因此instanceof操作符對這種物件沒有什麼意義;
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 ...