ECMA-262定義的對象是:無序屬性的集合,其屬性能夠包含基本值、對象或者函數javascript
說白了就是把一組特定的變量和方法封裝起來前端
那麼咱們先建立一個對象java
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(); //調用對象的方法
通常來講這樣建立的對象在某些狀況下能知足咱們的一些需求,然而事實狀況是咱們可能在實際工做中須要建立大量的具備某些相同特徵(屬性或方法)的對象函數
這就涉及到了代碼的複用性,畢竟誰也不肯意一遍一遍的寫重複的東西,因此聰明的程序員們發明了幾種可複用的對象建立方法】this
1.工廠模式spa
工廠模式抽象了建立具體對象的過程,實際上就是一個封裝特定接口用來建立對象的函數設計
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就是工廠方法,它接收三個參數,以後會在內部建立一個新的對象,並將屬性和方法初始化,最後返回出這個對象code
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並不能告訴咱們答案
...