做爲一門基於對象的語言,JavaScript又不像一門真正的面向對象編程的語言,由於它竟然沒有類(class)~javascript
function createPerson(name, age, job) { var o = new Object(); o.name = name; o.age = age; o.job = job; o.getName = function () { return this.name; } return o;//使用return返回生成的對象實例 } var person = createPerson('Jack', 19, 'SoftWare Engineer');
工廠模式是一種廣爲人知的設計模式,建立對象交給了一個能夠接受參數的方法。java
優勢:解決了屢次建立對象的繁瑣過程。編程
缺點:沒法識別對象類型,由於建立對象都是使用Object的原生構造函數來完成的。設計模式
function Person(name,age,job){ this.name = name; this.age = age; this.job = job; this.getName = function () { return this.name; } } var person1 = new Person('Jack', 19, 'SoftWare Engineer'); var person2 = new Person('Liye', 23, 'Mechanical Engineer');
使用自定義的構造函數(與普通函數同樣,只是用它來建立對象),定義對象類型(如:Person)的屬性和方法。它與工廠方法區別在於:函數
此外,要建立Person的實例,必須使用new關鍵字,以Person函數爲構造函數,傳遞參數完成對象建立;實際建立通過如下4個過程:this
上述由Person構造函數生成的兩個對象person1與person2都是Person的實例,所以能夠使用instanceof判斷,而且由於全部對象都繼承Object,所以person1 instanceof Object也返回真:設計
alert(person1 instanceof Person);//true; alert(person2 instanceof Person);//true; alert(person1 instanceof Object);//true; alert(person1.constructor === person2.constructor);//ture;