js面向對象-工廠模式和構造函數模式

什麼是面向對象

把數據和行爲(對數據的操做)結合起來,有類的概念,經過類建立任意多個具備相同屬性和方法的對象函數

  • 繼承:能夠使子類複用父類公開的變量、方法;
  • 封裝:屏蔽一系列的細節。使外部調用時只要知道這個方法的存在;
  • 多態:父類的方法繼承的到子類之後能夠有不一樣的實現方式;
var Person = {
    name: "wheeler",
    age: 25,
    inMeeting: function () {
        return "I am in Meeting";
    }
};

建立對象

爲了不重複造輪子,產生大量的代碼,咱們能夠使用工廠模式和構造函數模式。
建立對象目前有兩種方式:this

  • 對象字面量
var Person = {
    name: "wheeler",
    age: 25,
    inMeeting: function () {
        return "I am in Meeting";
    }
};

優勢:靈活方便
缺點:每建立一個新的對象都須要寫出完整的定義語句,不便於建立大量相同類型的對象,不利於使用繼承等高級特性code

  • 使用new表達式

主要是配合構造函數使用對象

function Person(name, age, dream){
    this.name = name;
    this.age = age;
    this.dream = dream;
    this.myDream =function () {
        alert(this.dream);
    }
};
person1 = new Person('wheeler', 25, "哈哈");
person2 = new Person('wheeler2', 26, "嘿嘿");

工廠模式

什麼是工廠模式?就是像工廠同樣批量建立對象。具體來講,抽象建立具體對象的過程。繼承

var createPerson = function (name, age, dream) {
    var person = {
        name: name,
        age: age,
        dream: function () {
            return dream;
        }
    };
    return person;

};
var person1 = createPerson('wheeler', 25, "哈哈");
var person2 = createPerson('wheeler2', 26, "嘿嘿");

構造函數模式

ECMAScript 中的構造函數可用來建立特定類型的對象。像Object和Array這樣的原生構造函數,在運行時會自動出如今執行環境中。ip

function Person(name, age, dream){
    this.name = name;
    this.age = age;
    this.dream = dream;
    this.myDream =function () {
        alert(this.dream);
    }
};
var person1 = new Person('wheeler', 25, "哈哈");
var person2 = new Person('wheeler2', 26, "嘿嘿");

以上代碼:作用域

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

以這種方式調用構造函數實際上會經歷如下4個步驟:io

  • 建立一個新對象;
  • 將構造函數的做用域賦給新對象(所以this就指向了這個新對象);
  • 執行構造函數中的代碼(爲這個新對象添加屬性);
  • 返回新對象。
相關文章
相關標籤/搜索