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

来源:互联网 发布:winhex linux 编辑:程序博客网 时间:2024/04/29 14:00

在文章迭代器(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,zfor(p in Iterator(obj))      console.log(p); //输出["x",1],["y",2]for(p in Iterator(obj,true))      console.log(p); //输出x和y
0 0