我正在和我的一位朋友交谈,他有大约9年的JS经验。他帮我解决了代码问题,并谈到了闭包和javascript工厂。我之前从未听过这个词,并且想知道是否"工厂"是javascript社区/语言中的东西?如果是这样,有人可以向我解释一下吗?
我知道什么是封口,但据他说,"工厂"是学习语言的下一级课程。
答案 0 :(得分:2)
来自Wikipedia:
在基于类的编程中,工厂方法模式是创造性的 使用工厂方法来处理创建问题的模式 对象,而不必指定对象的确切类 将被创建。这是通过调用工厂创建对象来完成的 方法 - 在接口中指定并由child实现 类,或在基类中实现并可选择地重写 派生类 - 而不是通过调用构造函数。
来自Learning JavaScript Design Patterns:
工厂模式是另一个关注的模式 创建对象的概念。它与其他模式不同的地方 在它的类别中,它没有明确要求我们使用a 构造函数。相反,Factory可以为其提供通用接口 创建对象,我们可以在其中指定工厂对象的类型 希望被创造。
想象一下,我们有一个UI工厂,我们被要求创建一个类型 UI组件。而不是直接使用创建此组件 新操作员或通过另一个创建构造函数,我们问一个 而是替换新组件的工厂对象。我们告诉工厂什么 对象的类型是必需的(例如“按钮”,“面板”)并且它是实例化的 这个,返回给我们使用。
如果对象创建过程是特别有用的话 相对复杂,例如如果它强烈依赖于动态因素或 应用程序配置。
此模式的示例可以在诸如ExtJS的UI库中找到 其中可以进一步创建对象或组件的方法 子类。
示例:
var Brand = {
Daihatsu : function(type) {
this.type = type;
},
Honda : function(type) {
this.type = type;
},
Toyota : function(type) {
this.type = type;
}
};
var Car = {
factory : function(brand, type) {
return new Brand[brand](type);
}
};
var cars = [
Car.factory('Honda', 'Civic'),
Car.factory('Toyota', 'AYGO'),
Car.factory('Daihatsu', 'Consorte'),
Car.factory('Toyota', 'Carina')
];