javaScript工厂模式分析

原理:

1.申明一个作用域里的具名函数,来模拟一个基类。函数的参数作为基类的参数传递。

2.具体而言:是在函数(模拟的基类)中声明局部的Object实例(通过构造函数声明的引用类型的值,只在本作用域有效),为这个实例添加属性和方法,这些属性和方法的值和该函数(模拟的基类)的参数挂钩;最后通过一个返回值返回出来

3.返回之后:(调用)函数赋值给需要的子类,这就完成了一个声明子类的动作,于是这个子类就具有了这个函数(模拟的基类)预先定义的属性和方法。并可以通过传参来灵活的复用。

<span style="font-size:14px;">	<script type="text/javascript">
		function Person(name){
			var o = new Object();
			o.name = name;
			return o;
		}
		var yy = Person("yy");
	</script></span>


优势和劣势:

优势:

这个是一个基本的模拟基类的方法,优势不多赘述。


劣势:

a.通过工厂模式创建的对象,由于都是基于返回值(Object)的,这样他的对象类型全都是Object,而不是它的基类。这样对于整个控制和拓展就不是很好。

<span style="font-size:14px;">	<script type="text/javascript">
		function Person(name){
			var o = new Object();
			o.name = name;
			return o;
		}
		var yy = Person("yy");
		alert(yy instanceof Object);  //true
		alert(yy instanceof Person);  //false
		alert(yy.constructor == Object);  //true
	</script></span>

yy instanceof Object 返回是 ture;(yy是Object的实例);

同理:yy constructor == Object 返回是 ture(yy这个实例是通过构造函数Object构建的);

但是:yy instanceof Person 返回是 false,这样就很不好,是工厂模式一个非常大的缺点;



b.在工厂模式中定义的方法(function)实际上都去声明了一个function实例。这样相同的方法都要去反复声明,是不合理的。这个问题在构造函数模式中也存在,在构造函数里详述这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值