javascript语言扩展:可迭代对象(2)

在文章迭代器(1)中我们简单介绍了如何创建一个可迭代对象;出于某种考虑你可能想从可迭代对象中显式获取一个迭代器对象,这时你可以调用Iterator()函数(该函数是定义在JavaScript 1.7中的全局函数),如果该函数的参数味一个可迭代对象,那么它将放回这个对象的__iteratior__()的返回值;Iterator()还可以传入第二个参数,该参数会参与__iterator__方法的调用。

Iterator()函数还有一个重要目的,如果传入的对象或数组没有定义__iterator__()方法,则会返回该对象的一个可迭代的自定义迭代器;该自定义迭代器的next()方法会返回一个包括2个值数组:第一个元素是属性名,第二个元素是属性值。

var obj = {x:1,y:11,z:111,last:"end"}
for(x in Iterator(obj))
  console.log(x)

以上代码运行结果为:

["x", 1]
["y", 11]
["z", 111]
["last", "end"]

Iterator()函数返回的迭代器还有2个重要特效:
1:只对自有属性进行遍历而忽略继承的属性;
2:入给其传入第二个参数true,则返回的迭代器只对属性名遍历,而忽略属性值:

var obj = {x:1,y:2}
Object.prototype.z = 3;
for(p in obj)
      console.log(p);  //输出x,y,z
for(p in Iterator(obj))
      console.log(p); //输出["x",1],["y",2]
for(p in Iterator(obj,true))
      console.log(p); //输出x和y
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大熊猫侯佩

赏点钱让我买杯可乐好吗 ;)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值