1. 工厂模式
直接在函数中创建一个新的obj并给它赋值,缺点在于每一次通过工厂方法去创建一个对象,这个对象的属性name和方法sayName都必须重新创建一次,浪费内存。
function createObj(){
let obj = new Object();
obj.name = 'asd';
obj.sayName = function(){
console.log(this.name)
}
return obj;
}
let obj = createObj();
2. 构造器模式
这种方法要通过this配合new去实现类似于构造函数的作用,缺点同上。
function Obj(){
this.name = 'asd';
this.sayName = function(){
console.log(this.name)
}
}
let obj = new Obj();
3. 原型模式
把属性和方法定义在原型上而不是this上,缺点在于当有引用属性时,改变一个对象的这个属性也会改变其他对象的这个属性。
function Obj(){}
Obj.prototype.name = 'asd';
Obj.prototype.sayName = function(){
console.log(this.name);
}
let obj = new Obj();
4. 构造器/原型混合模式
属性定义在this上,方法定义在原型上。
function Obj(){
this.name = 'asd';
this.arr = [1,2,3];
}
Obj.prototype.sayName = function(){
console.log(this.name);
}
let obj = new Obj();