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

工厂模式
  • 调用 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 本身创建参数, 方法(以 obj2 作为 this, 执行方法 Fun2)
  • 构造函数中不应 return 对象, 否则会覆盖 this
  • 实际上并不存在所谓的“构造函数”,只有对于函数的“构造调用”1
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


  1. 出自《你不知道的JavaScript》 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值