为什么对象使用`Symbol.iterator`而不是`iterator`

时间:2018-12-22 00:39:41

标签: javascript

对象是否使用属性my $str = "Saving to: ‘wapenc?T=mavodi-7-13b-2b-3-96-1e3431a’"; (my $results) = $str =~ /‘(.*?[^\\])‘/; print $results if $results; 而不是仅使用Symbol.iterator,以防止我们覆盖对象原型上的iterator属性?

如果是,还有其他原因吗?

只是试图理解JS中的符号。

1 个答案:

答案 0 :(得分:2)

如果只是iterator,则可能会破坏包含对象的旧代码,这些对象具有称为iterator的方法。同样,每当JS的设计者希望让开发人员向其对象添加其他特殊方法时,他们就有冒充现有名称并破坏现有代码的风险。

另一种替代方法是Python的__double_underscore__约定,开发人员不应定义这样的方法。