在文章迭代器(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
时间: 2024-09-25 05:14:09