📅  最后修改于: 2023-12-03 15:09:41.385000             🧑  作者: Mango
工厂函数是一种创建对象的设计模式,常见于JavaScript中。它是一种函数,返回一个新的对象实例,并且可以根据传递给函数的参数或其他条件返回不同的实例。
下面是一个简单的工厂函数示例:
function createPerson(name, age) {
return {
name: name,
age: age,
sayHello: function() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
};
}
const person1 = createPerson('John', 30);
const person2 = createPerson('Jane', 25);
person1.sayHello(); // 输出 "Hello, my name is John and I am 30 years old."
person2.sayHello(); // 输出 "Hello, my name is Jane and I am 25 years old."
在上面的示例中,createPerson
是一个工厂函数,它接受两个参数 name
和 age
,并返回一个包含这些属性以及 sayHello
方法的对象。
可以将工厂函数的优点与继承的概念结合起来,创建一个可以方便地生成不同类型的对象的工厂函数。这通常被称为“继承性工厂函数”。
例如,下面的示例是一个继承性工厂函数,它可以根据传入的 type
参数返回不同类型的对象:
function createShape(options) {
switch (options.type) {
case 'circle':
return {
type: 'circle',
radius: options.radius,
area: function() {
return Math.PI * this.radius * this.radius;
}
};
case 'rectangle':
return {
type: 'rectangle',
width: options.width,
height: options.height,
area: function() {
return this.width * this.height;
}
};
default:
throw new Error('Invalid shape type');
}
}
const circle = createShape({ type: 'circle', radius: 5 });
console.log(circle.area()); // 输出 78.53981633974483
const rectangle = createShape({ type: 'rectangle', width: 10, height: 20 });
console.log(rectangle.area()); // 输出 200
上面的示例中,createShape
是一个继承性工厂函数,它根据传入的 type
参数返回不同类型的对象。每个对象都有一个 type
属性和一个 area
方法。
工厂函数是一种创建对象的设计模式,它可以减少重复代码,更好地封装细节,并简化代码。同样,它也可以和继承的概念结合起来,创建一个方便的、具有继承性的工厂函数。