JavaScript 工厂函数是什么
工厂函数与构造函数/类函数类似,但工厂函数不使用new关键字来创建对象,而是直接创建并返回对象。
JavaScript中的工厂函数是非常有用的工具。工厂函数与构造函数/类函数类似,但在给内部值赋值时不需要使用”this”关键字,也不需要使用”new”关键字来实例化新对象。工厂函数可以包含内部值、方法等,就像普通的常规函数一样。工厂函数与常规函数的区别在于它们总是返回一个包含任何值、方法等的对象。
为什么有用?
如果我们有复杂的逻辑,并且需要一遍又一遍地创建具有相同逻辑的多个对象,我们可以在一个函数中编写这些逻辑,并将该函数作为工厂来创建我们的对象。这就像现实世界中的工厂生产产品一样。
示例1: 我们有一个工厂函数,它可以用相同逻辑生成新的机器人。使用这个函数,我们可以生产出任意数量的对象/机器人。
JavaScript
<script>
// Function creating new objects
// without use of 'new' keyword
function createRobot(name) {
return {
name: name,
talk: function () {
console.log('My name is '
+ name + ', the robot.');
}
};
}
//Create a robot with name Chitti
const robo1 = createRobot('Chitti');
robo1.talk();
// Create a robot with name Chitti 2.O Upgraded
const robo2 = createRobot('Chitti 2.O Upgraded');
robo2.talk();
</script>
输出:
My name is Chitti, the robot.
My name is Chitti 2.0 Upgraded, the robot.
示例2:
JavaScript
<script>
// Factory Function creating person
var Person = function (name, age) {
// creating person object
var person = {};
// parameters as keys to this object
person.name = name;
person.age = age;
// function to greet
person.greeting = function () {
return (
'Hello I am ' + person.name
+ '. I am ' + person.age
+ ' years old. '
);
};
return person;
};
var person1 = Person('Abhishek', 20);
console.log(person1.greeting());
var person2 = Person('Raj', 25);
console.log(person2.greeting());
</script>
输出:
Hello I am Abhishek. I am 20 years old.
Hello I am Raj. I am 25 years old.