//从一个实例对象生成另一个实例对象// create() 中的参数a作为返回实例对象b的原型对象,在a中定义的属性方法,都能被b实例对象继承下来const a ={
getX:function(){
console.log('X')}}const b = Object.create(a)
工厂模式
// 能创建多个类似的对象// 缺点:没有解决对象识别的问题functionPerson(name,age){const person =newObject()
person.name = name
person.age = age
person.sayName=function(){
console.log(this.name)}return person
}const p1 =reson('zs',12)
构造函数模式
传统
// 缺点:浪费了内存空间functionPerson(name,age){this.name = name
this.age = age
this.sayName=function(){
console.log(this.name)}}const p1 =newPerson('zs',12)
扩展模式
// 构造函数扩展模式functionPerson(name,age){const o =newObject()this.name = name
this.age = age
this.sayName=sayName
}// 定义多个全局函数,严重污染全局空间functionsayName(){
console.log(this.name)}const p1 =newPerson('zs',12)
寄生
// 寄生构造函数模式 结合工厂模式和构造函数// 创建一个函数,函数内部实例化一个对象,并且将对象返回,在外部的使用new来实现实例化对象// 缺点:1、定义了相同的方法,浪费内存空间 2、instanceof 和 prototype 没有意义functionPerson(name,age){const person =newObject()
person.name = name
person.age = age
person.sayName=function(){
console.log(this.name)}return person
}const p1 =newPerson('mjj',18)
稳妥
// 稳妥构造函数模式 :没有公共属性,并且它的方法也不引用 this 对象functionPerson(name){const a =10const person =newObject()// name就是属于私有属性
person.sayName=function(){
console.log(person)
console.log(name)}}// p1 对象也叫稳妥对象const p1 =Person('zs')