工厂功能

工厂函数只是一个返回对象的函数。

工厂函数不需要使用 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 中应用函数式编程实践的好方法,因为它们是函数。