工廠功能

工廠函式只是一個返回物件的函式。

工廠函式不需要使用 new 關鍵字,但仍可用於初始化物件,如建構函式。

通常,工廠函式用作 API 包裝器,就像 jQuerymoment.js 一樣 ,因此使用者不需要使用 new

以下是最簡單的工廠功能; 使用引數並使用它們來建立具有物件文字的新物件:

function cowFactory(name) {
    return {
        name: name,
        talk: function () {
            console.log('Moo, my name is ' + this.name);
        },
    };
}

var daisy = cowFactory('Daisy');  // create a cow named Daisy
daisy.talk();  // "Moo, my name is Daisy"

通過將它們包含在返回的物件之外,可以很容易地在工廠中定義私有屬性和方法。這樣可以封裝你的實現細節,因此你只能將公共介面公開給你的物件。

function cowFactory(name) {
    function formalName() {
        return name + ' the cow';
    }

    return {
        talk: function () {
            console.log('Moo, my name is ' + formalName());
        },
    };
}

var daisy = cowFactory('Daisy');
daisy.talk();  // "Moo, my name is Daisy the cow"
daisy.formalName();  // ERROR: daisy.formalName is not a function

最後一行會出錯,因為函式 formalNamecowFactory 函式內被關閉。這是一個關閉

工廠也是在 JavaScript 中應用函數語言程式設計實踐的好方法,因為它們是函式。