创建对象的工厂模式, 构造函数模式, 原型模式的简单区分

工厂模式

  • 调用 Fun1 不用关键字 new
  • 创建对象时可以带参
  • Fun1 里生成一个对象, 并返回该对象
  • 参数存在 obj1 本身
  • 实例化对象改变属性值后, 相互不影响
  • 相当于实例化时在 obj1 本身创建参数, 方法
function Fun1(value1, value2, value3) {
    
    
	var _obj = new Object();
	_obj.value1 = value1;
	_obj.value2 = value2;
	_obj.value3 = value3;
	_obj.fun1 = function() {
    
    
		// this 指向 _obj
		console.log(this.value1);
	}
	return _obj;
}
var obj1 = Fun1("value1", "value2", "value3");

构造函数模式

  • 用关键字 new 调用 Fun2
  • 创建对象时可以带参
  • Fun2 把数据挂在本身的 this 上, 不返回内容
  • 参数存在 obj2 本身
  • 实例化对象改变属性值后, 相互不影响
  • 相当于实例化时在 obj2 本身创建参数, 方法
function Fun2(value1, value2, value3) {
    
    
	this.value1 = value1;
	this.value2 = value2;
	this.value3 = value3;
	this.fun1 = function() {
    
    
		// this 指向 Fun2
		console.log(this.value1);
	}
}
var obj2 = new Fun2("value1", "value2", "value3");

原型模式

  • 用关键字 new 调用 Fun3
  • 创建对象时不能带参
  • Fun3 把数据挂在原型 prototype 上, 不返回内容
  • 参数存在 obj3 的原型链上 obj3.__proto__
  • 实例化对象改变属性值后, 相互影响
  • 相当于实例化时把参数, 方法继承下来
function Fun3() {
    
    }
Fun3.prototype.value1 = "value1";
Fun3.prototype.value2 = "value2";
Fun3.prototype.value3 = "value3";
Fun3.prototype.fun1 = function() {
    
    
	// this 指向 Fun3
	console.log(this.value1);
};
var obj3 = new Fun3();

//end

猜你喜欢

转载自blog.csdn.net/u013970232/article/details/109516004