JavaScript建立對象

調用系統的構造函數

建立一個最簡單的方式就是建立一個Object的實例,以下:函數

// 1. 調用系統的構造函數
    var person = new Object();

    // 添加屬性
    person.name = "小李";
    person.age = 22;
    person.sex = "F";

    // 添加方法
    person.eat = function () {
        console.log("我喜歡吃油炸榴蓮.")
    };

    person.play = function () {
        console.log("我喜歡玩電子遊戲.")
    };

    person.introduce = function () {
        console.log("我叫" + this.name + ", 今年" + this.age + "歲.");
    };    
    
    person.introduce();        // 輸出:我叫小李, 今年22歲.

上面的代碼建立了一個名爲object的對象,併爲它添加了三個屬性和三個方法。this

對象字面量

var person = {
    name: "小李",
    age: 22,
    sex: "F",
    introduce: function() {
        console.log("我叫" + this.name + ", 今年" + this.age + "歲.");
    }
}

工廠模式

可是,雖然Object構造函數和對象字面量能夠用來建立單個對象,可是這樣建立對象會產生大量的重複代碼。因而人們開始使用工廠模式。以下:code

function createPerson(name, age, sex) {
    var object = new Object();
    person.name = "小李";
    person.age = 22;
    person.sex = "F";
    person.introduce = function () {
        console.log("我叫" + this.name + ", 今年" + this.age + "歲.");
    };
    
    return person;
}

var person0 = createPerson("小蘇", "21", "M");
var person1 = createPerson("鐵子", "27", "M");

函數createPerson()可以根據接受的參數來構建一個包含全部信息的Person對象。能夠無數次地調用這個函數,而每次它都會返回一個包含三個屬性和一個方法的對象。工廠模式雖然解決了建立多個相似對象致使的代碼大量重複的問題,但卻沒有解決對象識別的問題,即如何知道一個對象的類型。隨着JavaScript的發展,又一個新的模式出現了,那就是構造函數模式。對象

構造函數模式

在ECMAScript中的構造函數能夠建立特定類型的對象。像Object對象和Array對象這樣的原生構造函數,在運行的時候回自動出如今執行環境中。此外咱們也能夠自定義構造函數,從而自定義對象的類型和方法。例如,前面的例子能夠用自動以構造函數重寫爲如下的代碼:遊戲

function Person(name, age, sex) {
    this.name = name;
    this.age  = age;
    this.sex  = sex;
    
    this.introduce = function () {
        console.log("我叫" + this.name + ", 今年" + this.age + "歲.");
    };
}

var person0 = new Person("小蘇", "21", "M");
var person1 = new Person("鐵子", "27", "M");

要建立一個Person的新實例,必須使用new操做符。這種操做方式調用構造函數實際上會經歷一下4個過程:ip

  1. 建立一個新對象;
  2. 將構造函數的做用域賦給新對象(所以this就指向了這個新對象);
  3. 執行構造函數中的代碼;
  4. 返回這個新對象。

工廠模式和構造函數的區別

  • 構造函數沒有顯式地建立對象;
  • 構造函數直接將屬性和方法賦給了this對象;
  • 構造函數沒有return語句,即沒有返回值;
  • 構造函數首字母須要大寫。
相關文章
相關標籤/搜索