在 js 中可以通过 Object 构造函数或对象字面量来创建对象,但是这些方式在创建具有同样接口的多个对象需要重复编写很多代码。
因此,便有了几种常见的创建对象的模式,它们分别有着各自的优缺点,可以根据不同需求选择不同的模式。
工厂模式
function createPerson(name, age){
// 创建一个对象
let obj = new Object();
// 把变量一一对应
obj.name = name;
obj.age = age;
obj.sayName = function(){
console.log(this.name);
};
// 返回创建好的对象
return obj;
}
let person = createPerson("ec50n9", 19);
console.log(person);
// { name: "ec50n9", age: 19 }
之所以叫工厂模式,是因为它的工作方式类似于流水线:
在调用 createPerson()
函数的时候,它就创建一个空的新对象(Object),按照预先定义的那样,把我们传进去的值一一装配到新对象上,然后把装配好的对象返回出来。
作用
只需调用一个函数就可以创建一个类似对象,避免了重复编写类似代码的情况。
不足
因为在函数内部,都是创建一个新的 Object
对象来装配的,所以创建出来的对象都是 Object
类型的,无法解决对象标识问题,也就是创建出来的新对象没有自己的类型。使用构造函数模式就可以解决这个问题了。
构造函数模式
function Person(name, age){
this.name = name;
this.age = age;
this.sayName = function(){
console.log(this.name);