【js学习笔记-057】构造函数重载和工厂方法

通过重载构造函数让它根据传入参数的不同来执行不同的初始化方法。如Set构造函数

function Set(){

  this.values= {};

  this.n = 0;

  if(arguments.length==1 && isArrayLike(arguments[0])){

     this.add.apply(this,arguments[0]);

   }else if(arguments.length>0){    

      this.add.apply(this,arguments);

  } 

}

这段代码所定义的Set构造函数可以显式将一组元素作为参数列表传入,也可以传入元素组成的数组。但是函数函数有多义性,如果集合的某个成员是一个数组就无法通过这个构造函数来创建集合啦。

下面这个工厂方法用来通过数组初始化Set对象:

Set.fromArray= function(a){

  s =new Set();

 s.add.apply(s,a);

 return s;

}

 

可以给工厂方法定义任意的名字,不同名字的工厂方法用以执行不同的初始化,但由于构造函数是类的公有标识,因此每个类只能有一个构造函数。但这并不是一个“必须遵守”的规则。

在JS中是可以定义多个构造函数继承自一个原型对象的,如果这样做的话,由这些构造函数的任意一个所创建的对象都属于同一类型。不推荐这样使用,但下例代码使用这种技术定义了该类的一个辅助构造函数:

 

 function SetFromArray(a){

  Set.apply(this,a);

}

 

SetFromArray.prototype =Set.prototype;

var s = new SetFromArray([1,2,3]);

 s instanceof Set ; //=>true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值