Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 描述我在这段代码中是如何工作的Symbol.iterator_Javascript - Fatal编程技术网

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

我目前正在阅读有说服力的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: 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-我在上面的第二段代码后添加了一点。非常感谢您给我们提供了空闲时间。