工厂模式(Factory)
Person(name, age) { var obj = {} obj.name = name obj.age = age return obj}var p1 = Person('jack', 25)var p2 = Person('lily', 22)
与构造函数方式写一个类的区别在于没有使用this,而是每次都构造一个空对象,然后给其添加属性。创建对象方式不是使用new,而是使用函数调用方式。这种方式基本上用来替代一个类(具有相同属性的对象),而复杂一些的工厂则可以造不同类型的对象。
?
下面以一个水果工厂示例
function Banana() { this.price = '$1.5'}function Apple() { this.price = '$1.2'}function Orange() { this.price = '$2.2'}// 静态工厂类function Fruit() {}Fruit.factory = function(type) { if (!window[type]) { return } var fruit = new window[type] return fruit}// 制造不同的水果var banana = Fruit.factory('Banana')var apple = Fruit.factory('Apple')var orange = Fruit.factory('Orange')
有三个水果类Banana、Apple、Orange,一个水果工厂类Fruit,通过静态方法factory每次可以造出不同的水果类对象。
?
工厂模式在JavaScript原生对象Object也有所体现,比如
var obj = Object(), num = Object(1), str = Object('s'), boo = Object(false);
Object就是一个工厂,根据参数不同会构造出不同的对象。obj是一个空对象,num是一个Number类型的对象,str是一个String类型的对象,boo是Boolean类型的对象。
?
jQuery 1.7中新增的$.Callbacks也是一个工厂,每次调用它都会返回一个具有add, remove, fire等方法的对象。还可以根据参数如“once”, “memory”等构造出具有不同性质的对象。