ECMA-262定義的對象是:無序屬性的集合,其屬性可以包含基本值、對象或者函數
說白了就是把一組特定的變量和方法封裝起來
那麼我們先創建一個對象
var person=new Object(); person.name="Sakura"; person.age=22; person.job="前端開發"; person.sayName=function(){ console.log(this.name); } //當一個變量被封裝在一個對象中時,這個變量就可以稱為該對象的一個屬性 //同樣的,當一個函數被封裝在一個對象中時,這個函數就可以稱為該對象的一個方法
實際上這種寫法較為古老,所以我們可以用對象字面量的方法重寫一下
var person={ this.name="Sakura", this.age=22, this.job="前端開發", this.sayName=function(){ console.log(this.name); } }
這樣一個對象就被創建出來了,當我們需要調用對象的某個方法,或者獲取對象的某個屬性時,就可以用“.”號來調用
var a=person.name; //獲取對象的屬性 console.log(a); //Sakura person.sayName(); //調用對象的方法
一般來說這樣創建的對象在某些情況下能滿足我們的一些需求,然而事實情況是我們可能在實際工作中需要創建大量的具有某些相同特征(屬性或方法)的對象
這就涉及到了代碼的復用性,畢竟誰也不願意一遍一遍的寫重復的東西,所以聰明的程序員們發明了幾種可復用的對象創建方法】
1.工廠模式
工廠模式抽象了創建具體對象的過程,實際上就是一個封裝特定接口用來創建對象的函數
function createPeson(name,age,job){ var obj=new Object(); obj.name=name; obj.age=age; obj.job=job; obj.sayName=function(){ console.log(this.name); //要注意這裡的this代表obj,而非createPerson } return obj; }
這個createPerson就是工廠方法,它接收三個參數,之後會在內部創建一個新的對象,並將屬性和方法初始化,最後返回出這個對象
var person_01=createPerson("Sakura",22,"前端開發"); var person_02=createPerson("Misaka",20,"網頁設計");
這樣一來我們可以不用寫過多冗余的代碼,僅僅用一個工廠方法就可以創建更多不同的對象
凡事皆有但是,在之前我們用instanceof運算符來確定對象的類型,當時我們的代碼是這樣的
var abc=function(num){ return num+1; } console.log(abc instanceof Object); //一切皆對象 console.log(abc instanceof Function); //Function類型的對象
我們注意到,abc函數既是Object又是Function,那麼我們可以認為函數abc是Function類型的Object
同理,一個數組就是Array類型的Object
然而我們以上創建的person_01是啥玩意?
沒錯他只是Object,假如我們工作中需要創建很多個工廠模式,基於這些工廠方法又創建很多種不同的對象,那麼怎麼區分這些對象是什麼類型或者說是哪個工廠方法創建的?
顯然instanceof並不能告訴我們答案
...