工厂功能
工厂函数只是一个返回对象的函数。
工厂函数不需要使用 new
关键字,但仍可用于初始化对象,如构造函数。
通常,工厂函数用作 API 包装器,就像 jQuery 和 moment.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
最后一行会出错,因为函数 formalName
在 cowFactory
函数内被关闭。这是一个关闭 。
工厂也是在 JavaScript 中应用函数式编程实践的好方法,因为它们是函数。