Javascript 为什么我们使用[Symbol.iterator]而不是'for'循环?
我正在阅读,我很难理解为什么我们需要定义Javascript 为什么我们使用[Symbol.iterator]而不是'for'循环?,javascript,iterator,symbols,Javascript,Iterator,Symbols,我正在阅读,我很难理解为什么我们需要定义MatrixIterator函数来迭代矩阵的内容。我通常在另一个for的内部使用for来迭代二维矩阵的内容,类似于。是因为JS中每个对象的[Symbol.iterator]在调用for循环的缩写时都会被使用,这是for的 此外,我是否正确地假设标准的[Symbol.iterator]无法自动迭代二维对象,因此需要创建矩阵迭代器并将其指定为: Matrix.prototype[Symbol.iterator] = function() { return
MatrixIterator
函数来迭代矩阵的内容。我通常在另一个for
的内部使用for
来迭代二维矩阵的内容,类似于。是因为JS中每个对象的[Symbol.iterator]
在调用for
循环的缩写时都会被使用,这是for
的
此外,我是否正确地假设标准的[Symbol.iterator]
无法自动迭代二维对象,因此需要创建矩阵迭代器并将其指定为:
Matrix.prototype[Symbol.iterator] = function() {
return new MatrixIterator(this);
};
我们是否可以这样做:Matrix.prototype[Symbol.iterator]=MatrixIterator代码>
离题:我觉得我应该更深入地了解其他一些事情,因为我对这些概念感到相当困惑。有人能详细说明接口的含义吗?书中确实提到了:
这样一个程序的不同部分通过接口、有限的函数集或绑定相互交互,这些函数或绑定在更抽象的级别上提供有用的功能,隐藏了它们的精确实现
及
将接口与实现分离是一个好主意。它通常被称为封装
但它没有提到什么是实施
循环的缩写,它是的…的
不,for…of
不是(…;…;…)
循环的正常的简写。这是一个完全独立的机制
为什么我们需要定义矩阵算子
函数来迭代矩阵
的内容?。这是不是因为每当您为
的…使用时,都会使用JS中每个对象的[Symbol.iterator]
对。我们定义MatrixIterator
,因为它符合迭代器接口,这是由Symbol.iterator
方法返回的,可以在这样的循环中使用
当然,有其他方法可以实现这一点,我们不一定需要额外创建一个MatrixIterator
类。发电机功能通常是最简单的
我通常在另一个for
的内部使用for
来迭代二维矩阵的内容
当然,但这是相当大的语法开销——两个循环,两个计数器,双缩进。它可以简单得多,我们不想在迭代矩阵时到处重复这种模式。iterable接口允许这样做
假设标准的[Symbol.iterator]
不能自动迭代二维对象,对吗
没有标准的符号。迭代器方法。每种类型都需要自己定义<例如,prototype
可以,但它只在数组上工作,而不在我们的矩阵
类上工作
我们是否可以这样做:Matrix.prototype[Symbol.iterator]=MatrixIterator代码>
这是行不通的,因为MatrixIterator
a)是一个构造函数,需要用new
b)调用矩阵实例,它应该作为一个参数迭代投票关闭,因为这是一次3-4个问题。。。首先,是的,for
循环的不知道如何在矩阵上迭代,因此需要自定义符号。迭代器
。不过,这是一个愚蠢的玩具示例,通常是针对要对整个矩阵进行乘法或其他运算的矩阵。是否允许我们这样做:matrix.prototype[Symbol.iterator]=MatrixIterator
-这将不起作用,因为MatrixIterator
不再引用矩阵对象(新矩阵运算符(this)
中的this
)。也许可以用某种方式编写MatrixIterator
,但它不会像代码那样干净或有用。我明白了,谢谢你的解释!@jnylenI明白了,谢谢你的回答。我想我错过了很多我应该知道的事情,你也这么认为吗?如果是,我应该读什么或关注什么关于?@WealthyPlayer不知道,我认为“雄辩的JavaScript”的课程很好。(至少第一版看起来合理,我没有读第二版)