JavaScript面向對象編程

  做爲一門基於對象的語言,JavaScript又不像一門真正的面向對象編程的語言,由於它竟然沒有類(class)~javascript

JavaScript類的實現方案

  1.工廠模式

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的原生構造函數來完成的。設計模式

  2.構造函數模式 

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)的屬性和方法。它與工廠方法區別在於:函數

  • 沒有顯式地建立對象
  • 直接將屬性和方法賦值給this對象;
  • 沒有return語句;

      此外,要建立Person的實例,必須使用new關鍵字,以Person函數爲構造函數,傳遞參數完成對象建立;實際建立通過如下4個過程:this

  1. 建立一個對象
  2. 將函數的做用域賦給新對象(所以this指向這個新對象,如:person1)
  3. 執行構造函數的代碼
  4. 返回該對象

  上述由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;
相關文章
相關標籤/搜索