Javascript 描述我在这段代码中是如何工作的Symbol.iterator
我目前正在阅读有说服力的Javascript。我不能理解这一部分 我不明白Symbol.iterator部分。你能解释一下它是如何工作的吗?谢谢Javascript 描述我在这段代码中是如何工作的Symbol.iterator,javascript,Javascript,我目前正在阅读有说服力的Javascript。我不能理解这一部分 我不明白Symbol.iterator部分。你能解释一下它是如何工作的吗?谢谢 class MatrixIterator { constructor(matrix) { this.x = 0; this.y = 0; this.matrix = matrix; } next() { if (this.y == this.matrix.height) return { done
class MatrixIterator {
constructor(matrix) {
this.x = 0;
this.y = 0;
this.matrix = matrix;
}
next() {
if (this.y == this.matrix.height) return {
done: true
};
let value = {
x: this.x,
y: this.y,
value: this.matrix.get(this.x, this.y)
};
this.x++;
if (this.x == this.matrix.width) {
this.x = 0;
this.y++;
}
return {
value,
done: false
};
}
}
Matrix.prototype[Symbol.iterator] = function() {
return new MatrixIterator(this);
};
Symbol.iterator
是一个(这只是意味着它是在规范中定义的,并且可以作为Symbol
的属性使用)它是JavaScript在需要从对象获取迭代器时寻找的方法的键。迭代器由for of
,…
(在数组上)等用于循环对象的内容
例如,在此代码中:
const a=[1,2,3];
for(a的常量值){
console.log(值);
}
所以当我们用MatrixIterator创建新实例时,矩阵变成了这个?@HrantBaloyan-通常是的,因为obj[propertyKey]()
就像obj.method()
(如果propertyKey
是“method”
),所以当你以这种形式进行调用时,此
在方法调用期间设置为obj
。所以如果你有const m=new矩阵(/*…*/)
,则在调用m[Symbol.iterator]()
的正常情况下,此
将在调用中m
。然后,该方法将其作为参数传递给新的Matrixitator
@T.J.Crowder,对符号.iterator
,+1进行了很好的描述。另外,您能否提供一个示例,说明如何在开发例程中使用此功能?比如,通过循环使用Symbol.iterator
,而循环就是一个例子,但是使用Symbol.iterator
有什么好处呢?我仍然不清楚:(@k3llydev-我在上面的第二段代码后添加了一点。非常感谢您给我们提供了空闲时间。