js 让集合只接收特定的类型的元素

js的数组可以接收不同类型的元素,但有的时候我们希望数组只接收特定类型的元素,当不符合类型的元素试图加入集合时,我们希望程序报告一个异常。

实现这个机制可以通过构造一个通用的模板来实现一个“集合工厂”,由它来返回我们需要的特定类型的集合对象,请看下面的例子:

 

<html>
<head>
 <title>Example-6.16</title>
</head>
<body>
<script>
<!--
 function dwn(s)
 {
  document.write(s + "<br/>");
 }
 function ListTemplete(type) //一个集合模板,可以用来构造任何一种类型的"集合"
 {
  var members = [];
  var list = function()  //定义一个list构造函数,当函数被new时自动执行,返回list
  {
   this.apfpend.apply(this,arguments);  //通过apply属性函数自动执行apfpend方法
  } 
  list.prototype.apfpend = function()  //定义一个apfpend()方法,这个方法的作用是往集合中添加元素,对象可以直接使用这个方法
  {
   for(var i = 0; i < arguments.length; i++)
   { 
    if(typeof(arguments[i]) == type || (typeof(type)=='function' && arguments[i] instanceof type))
    {
     members.push(arguments[i]);
    }   
       else
    {
        throw new TypeError("元素类型与集合声明不符合");  //当添加的元素与集合声明的类型不匹配时,将会抛出TypeError异常
    }
      }
  }
  list.prototype.toArray = function() //toArray方法将集合转换为数组
  {
   return members.slice(0); 
  }
  return list;
 }

 var numberList = new ListTemplete("number"); 
//构建一个数值集合,要求集合中的每一个元素都必须是数值
 var a = new numberList(1,2,3); 
 dwn(a.toArray());
 a.apfpend(4,5,3);
 dwn(a.toArray());

 ObjectList = new ListTemplete(Object); 
//构建一个Object集合,要求集合中的每一个元素都必须是Object对象
 var b = new ObjectList({x:1, y:2}, {x:3, y:4});
 dwn(b.toArray());

 function Point(x,y)
 {
  this.x = x;
  this.y = y; 
 }
 Point.prototype.toString = function()
 {
  return "(" + this.x + "," + this.y + ")";
 }

 PointList = new ListTemplete(Point); 
//构建一个集合,要求集合中的每一个元素都是一个Object
 var c = new PointList();
 c.apfpend(new Point(1,3), new Point(2,4));
 dwn(c.toArray());
-->
</script>
</body>
</html>

从上面的例子可以继续学习构造函数的使用,函数属性的定义。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值