在学习 jQuery 的过程中,经常会看到“工厂函数”这个概念。
那么,究竟什么是 JavaScript 中的工厂函数?
刚开始看到这个名称时,其实不太容易理解。但如果从“工厂”这个词本身去理解,就简单很多了。
普通工厂负责生产产品,而 JavaScript 中的工厂函数,则负责创建和返回对象。
也就是说,每调用一次函数,就像工厂生产了一件新的“产品”。
一个简单的例子
先来看下面这个例子:
function facfunc(){
varobj=newObject();
obj.name ="Hito";
obj.sex ="male";
obj.age =25;
return obj;
}
vartest1=facfunc();
vartest2=facfunc();在这个函数中,首先通过:
varobj = newObject();
创建了一个新的对象。
然后为这个对象添加一些属性:
obj.name ="Hito";
obj.sex ="male";
obj.age =25;
最后通过:
return obj;
将这个对象返回。
这样,每次调用:
都会创建一个新的对象。
例如:
虽然 test1 和 test2 都是通过同一个函数创建的,但它们实际上是两个不同的对象。
这也就是“工厂函数”最容易理解的地方:
调用一个函数,由函数负责创建对象,然后把创建好的对象返回。
为什么叫工厂函数?
其实可以把这个函数理解成一个简单的生产工厂。
例如:
每调用一次函数,就相当于生产一个新的对象。
因此,一个简单的工厂函数通常具有几个特点:
- 它本身是一个函数
- 函数内部创建一个对象
- 为对象添加属性或方法
- 最后返回这个对象
例如继续完善一下:
function createUser(name, age){
varobj=newObject();
obj.name =name;
obj.age =age;
obj.say = function(){
alert("My name is "+this.name);
};
return obj;
}调用时:
varuser1=createUser("Hito", 25);
varuser2=createUser("Tom", 30);这样就可以通过同一个函数,创建不同的数据对象。
user1.name; // Hito
user2.name; // Tom
它解决了什么问题?
如果不使用函数,创建多个相似的对象可能需要重复写很多代码。
例如:
var user1= {
name: "Hito",
age: 25
};
var user2= {
name: "Tom",
age: 30
};如果对象数量越来越多,重复代码也会越来越多。
使用工厂函数之后,可以统一对象的创建过程:
function createUser(name, age){
varobj= {};
obj.name =name;
obj.age =age;
return obj;
}之后只需要:
var user1=createUser("Hito", 25);
var user2=createUser("Tom", 30);
var user3=createUser("Jack", 28);就可以创建多个结构相同的对象。
这也是工厂函数名称中“工厂”的含义:按照统一的方式,批量生产具有相同结构的对象。
总结
JavaScript 中的工厂函数其实并没有那么复杂。
简单来说,它就是:
一个用于创建并返回对象的函数。
可以把它理解为一个对象生产工厂。
每次调用工厂函数,都可以创建一个新的对象,并按照统一的结构为对象添加属性和方法。
所以,对于我来说,理解 JavaScript 工厂函数可以简单记住三点:
- 它是一个函数
- 它负责创建对象
- 它可以像工厂一样,生产结构相似的对象
理解了这一点之后,再去看 JavaScript 中一些对象创建方式,就会更容易理解了。
评论0
欢迎分享你的看法,也欢迎补充不同的实践经验。