JavaScript總結--建立對象
在JavaScript中建立對象主要就是用以下三種語句:
var box=new Object(); 或var box=Object();
var box={};//字面量
function Box(){};//建構函式
現在,我們就牛刀小試,來建立一個對象
var man=new Object();//建立Object對象的執行個體:manman.name='Mr.Q';//man對象的name屬性man.sex=30;//man對象的nameman.work=function(){return this.name+' is working.';};alert(man instanceof Object);//true 是Object對象的執行個體alert(man.work());//Mr.Q is working.
如果要建立和以上對象類似的對象怎麼辦?
方案一:直接賦值;缺點:會覆蓋原來對象
var woman=man;woman.name='Ms.L';//man對象的name屬性woman.sex=21;//man對象的namewoman.work=function(){return this.name+' is working.';};alert(woman.name);//Ms.L 會將man對象的name屬性覆蓋掉
方案二:用相同的方式再執行個體化一個對象;缺點:會產生大量重複代碼
var woman=new Object();//建立Object對象的執行個體:manwoman.name='Ms.L';//man對象的name屬性woman.sex=21;//man對象的namewoman.work=function(){return this.name+' is working.';};alert(woman.work());//Mr.Q is working.
最佳化一:原廠模式:解決執行個體化大量類似對象產生重複代碼問題
function createobject(name,sex){var obj=new Object();obj.name=name;obj.sex=sex;obj.work=function(){return this.name+' is working';};return obj;}var man=createobject('Mr.Q',30);var woman=createobject('Ms.L',21);alert(man.work());alert(woman.work());
弊端: 因為是原廠模式嘛!批量生產,產品都一個樣。對象之間無法區分,他們全都是Object對象的執行個體。
最佳化二:建構函式解決重複執行個體化和對象識別問題
function Person(name,sex){//人類this.name=name;this.sex=sex;this.work=function(){return this.name+' is working';};}var man=new Person('Mr.Q','男');var woman=new Person('Ms.L','女');alert(man instanceof Object);alert(man instanceof Person);function ET(name,sex){//外星人this.name=name;this.sex=sex;this.work=function(){return this.name+' is working';};}var marsman=new ET('Mr.Q','男');alert(marsman instanceof ET);//truealert(marsman instanceof Person);//false mrasman是ET對象的執行個體,而不是Person對象的執行個體
總結:在這篇文章中我們簡單介紹了建立一個對象的三種方式:Object,字面量和建構函式,而當建立很多類似對象時,原廠模式是個不錯的選擇,但因為批量標準化的生產,產品缺乏個性,所以我們要用建構函式,來區分不同的對象。可是當我們通過建構函式來區分不同的對象時,依然避免不了產生重複代碼的問題,就像上面的Person和ET它們除了建構函式名稱不一樣,其他都一樣,那麼這又該如何解決呢?我想,原型和繼承的使用是少不了的,將在後續文章中介紹。