目录
一、工厂模式
1. 工厂模式其实就是普通函数
2. 可以解决创建多个类似对象的问题,
3. 没有解决对象标识问题(即新创建的对象是什么类型)
// 工厂模式
function createPerson(name, age) {
let o = new Object()
o.name = name
o.age = age
o.sayName = () => {
console.log(name)
}
return o
}
let person1 = createPerson('jack', 18)
console.log(person1)
person1.sayName()
二、构造函数模式
与工厂模式(普通函数)的区别:
1. 没有显式地创建对象
2. 属性和方法直接赋值给了 this
3. 没有 return
// 构造函数模式
function Person(name, age) {
this.name = name
this.age = age
this.sayName = () => {
console.log(this.name)
}
}
let person2 = new Person('tim', 20)
console.log(2, person2)
person2.sayName()
调用构造函数执行的操作(new执行的操作):
1. 在内存中创建一个新对象(new Object)
2. 新对象内部的 原型对象[[Prototype]] 被赋值为构造函数(function Person(){})的 原型对象,即新对象的 [[Prototype]]: Person.prototype
- 如果你想深入理解这一步,可以阅读JS原型最详解
3. 构造函数内部的this被赋值为创建的新对象(this指向新对象)
4. 执行构造函数内部的代码(给新对象添加属性、方法)
5. 构造函数返回该对象