面向對象的語言具備一個共同的標誌,那就是具備「類」的概念,可是在javascript中沒有類的概念,在js中將對象定義爲「無序屬性的集合,其屬性能夠包含基本值,對象或者函數」,即其將對象看做是一組名值對的散列表。這樣問題就來了,如何建立對象呢?javascript
在最開始時使用object構造函數和對象字面量來建立單個對象,下面簡要介紹這兩種方法。前端
object構造函數:建立自定義對象的最簡單方式就是建立一個object的實例,而後爲這個實例添加屬性和方法:java
var person=new object(); person.name="haha"; person.age=20; person.job="搞笑工做者"; person.sayName=function(){ alert(this.name); }; //前端全棧學習交流圈:866109386 //面向1-3經驗年前端開發人員 //幫助突破技術瓶頸,提高思惟能力
在上面的代碼中,定義了一個person對象,而且添加了三個屬性和一個方法,其中方法採用的時函數表達式的方式實現,這是用object構造函數的方式建立一個對象。函數
對象字面量:學習
var person={ name:"haha", age:20, job:"搞笑工做者", sayName:function(){ alert(this.name); } }
以上代碼中一樣建立了一個person對象,這種方法相似於代碼塊的方式,實現了對一個person對象的建立。this
以上這兩種方法中,都須要大量重複定義,在咱們須要建立對象時就須要重複以上代碼,不夠精煉,因此出現了工廠模式和構造函數模式類建立對象的方法。code
工廠模式:對象
工程模式抽象了建立具體對象的過程(專業書籍中給出),其實說的比較明白點就是採用函數的形式,用函數來封裝建立對象的過程,再建立對象時以調用函數的形式建立。例如:ip
function createPerson(name,age,job){ var o=new object(); o.name="haha"; o.age=20; o.job="搞笑工做者"; o.sayName=function(){ alert(this.name); }; return o; } var person1=createPerson("hehe",22,"呵呵工做者"); var person2=createPerson("heihei",23,"嘿嘿工做者"); //前端全棧學習交流圈:866109386 //面向1-3經驗年前端開發人員 //幫助突破技術瓶頸,提高思惟能力
在這種工廠模式下,將以object構造函數建立對象的方法封裝到了一個函數中,在之後的建立對象的過程當中,直接調用此方法就能夠建立出一個接着一個的對象。開發
構造函數模式:
構造函數模式相對於工廠模式的優點在於構造函數模式能夠建立特定類型的對象。
function Person(name,age,job){ this.name=name; this.age=age; this.job=job; this.sayName=function(){ alert(this.name); }; } var person1=new Person("hehe",22,"呵呵工做者"); var person2=new Person("heihei",23,"嘿嘿工做者"); //前端全棧學習交流圈:866109386 //面向1-3經驗年前端開發人員 //幫助突破技術瓶頸,提高思惟能力
在以上代碼中,定義一個Person()的方法,在Person()方法中,將其屬性進行了實例化,這種方法相似於在面嚮對象語言中在實例化類時直接會調用的構造函數,利用這種方法,將此函數大體至關於面嚮對象語言中的類,能夠在之後的代碼中不斷的實例化,用以不斷建立出此類的對象。在Javascript中,這種構造函數也是一種函數,不過是專門用於建立對象而已。