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();