Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[zh-cn]: update the translation of Set constructor&@@iterator()&@@species #16466

Merged
merged 6 commits into from
Oct 24, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,60 +5,73 @@ slug: Web/JavaScript/Reference/Global_Objects/Set/@@iterator

{{JSRef}}

**`@@iterator`** 属性的初始值和 {{jsxref("Set.prototype.values()", "values")}} 属性的初始值是同一个函数。
{{jsxref("Set")}} 实例的 **`[@@iterator]()`** 方法实现了[可迭代协议](/zh-CN/docs/Web/JavaScript/Reference/Iteration_protocols)以允许 `Set` 对象被大多数期望可迭代对象的语法所使用,例如[展开语法](/zh-CN/docs/Web/JavaScript/Reference/Operators/Spread_syntax)和 {{jsxref("Statements/for...of", "for...of")}} 循环。它返回一个[集合迭代器对象](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Iterator),它会以插入顺序生成集合的值。

该属性的初始值与 {{jsxref("Set.prototype.values()")}} 属性的初始值是同一个函数对象。

{{EmbedInteractiveExample("pages/js/set-prototype-@@iterator.html")}}

## Syntax
## 语法

```plain
mySet[Symbol.iterator]
```js-nolint
set[Symbol.iterator]()
```

### Return value
### 参数

无。

### 返回值

返回 `Set` **iterator** 函数,默认值是 {{jsxref("Set.prototype.values()", "values()")}} 函数
{{jsxref("Set.prototype.values()")}} 返回值相同:一个新的[可迭代迭代器对象](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Iterator),它会以插入顺序生成集合的值

## Examples
## 示例

### Using `[@@iterator]()`
### 使用 for...of 循环进行迭代

请注意,通常你不需要直接调用此方法。`@@iterator` 方法的存在使得 `Set` 对象[可迭代](/zh-CN/docs/Web/JavaScript/Reference/Iteration_protocols#可迭代协议),而像 `for...of` 循环这样的迭代语法会自动调用此方法以获取用于循环的迭代器。

```js
const mySet = new Set();
mySet.add("0");
mySet.add(1);
mySet.add({});

const setIter = mySet[Symbol.iterator]();

console.log(setIter.next().value); // "0"
console.log(setIter.next().value); // 1
console.log(setIter.next().value); // Object
for (const v of mySet) {
console.log(v);
}
```

### Using `[@@iterator]()` with `for..of`
### 手动控制迭代器

你仍然可以手动调用返回的迭代器对象的 `next()` 方法来获得最大程度的控制权。

```js
const mySet = new Set();
mySet.add("0");
mySet.add(1);
mySet.add({});

for (const v of mySet) {
console.log(v);
}
const setIter = mySet[Symbol.iterator]();

console.log(setIter.next().value); // "0"
console.log(setIter.next().value); // 1
console.log(setIter.next().value); // {}
```

## Specifications
## 规范

{{Specifications}}

## Browser compatibility
## 浏览器兼容性

{{Compat}}

## See also
## 参见

- {{jsxref("Set")}}
- {{jsxref("Set.prototype.entries()")}}
- {{jsxref("Set.prototype.keys()")}}
- {{jsxref("Set.prototype.values()")}}
- {{jsxref("Symbol.iterator")}}
- [迭代协议](/zh-CN/docs/Web/JavaScript/Reference/Iteration_protocols)
Original file line number Diff line number Diff line change
Expand Up @@ -5,29 +5,41 @@ slug: Web/JavaScript/Reference/Global_Objects/Set/@@species

{{JSRef}}

**`Set[@@species]`** 访问器属性返回`Set`的构造函数。
**`Set[@@species]`** 静态访问器属性是一个未使用的访问器属性,指定了如何复制 `Set` 对象。

## 语法

```js-nolint
Set[Symbol.species]
```

### 返回值

调用 `get @@species` 的构造函数的值(`this`)。返回值用于构造复制的 `Set` 实例。

## 描述

species 访问属性返回 `Set` 对象的默认构造函数。子构造函数或许会重载这个属性以至改变构造函数的赋值。
`@@species` 访问器属性返回 `Set` 对象的默认构造函数。子类构造函数可以覆盖它以更改构造函数赋值。

> **备注:** 目前所有 `Set` 方法均未使用此属性。

## 示例

### 普通对象中的 Species
### 普通对象的 Species

species 属性返回默认的构造函数,它是`Set` 对象的构造函数:
`@@species` 属性返回默认构造函数,即 `Set` 的构造函数。

```js
Set[Symbol.species]; // function Set()
Set[Symbol.species]; // 函数 Set()
```

### 派生对象中的 Species
### 派生对象的 Species

在一个派生集合对象中 (比如你自定义的`MySet`集合), `MySet` 的 species 属性 是 `MySet` 构造函数。又或者,你想要重写它,让它能在你派生的类方法中能返回父级`Set` 对象:
在一个自定义的 `Set` 子类(如 `MySet`)的实例中,`MySet``species` 是 `MySet` 构造函数。但是,你可能希望覆盖它,以便在派生类方法中返回父 `Set` 对象:

```js
class MySet extends Set {
// Overwrite MySet species to the parent Set constructor
// 用父类 Set 构造函数覆盖 MySet 的 species
static get [Symbol.species]() {
return Set;
}
Expand All @@ -42,7 +54,7 @@ class MySet extends Set {

{{Compat}}

## 另见
## 参见

- {{jsxref("Set")}}
- {{jsxref("Symbol.species")}}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
---
title: Set() constructor
title: Set() 构造函数
slug: Web/JavaScript/Reference/Global_Objects/Set/Set
---

{{JSRef}}

**`Set` 构造函数**能让你创建 `Set` 对象,其可以存储任意类型的唯一值,无论是[基本类型](/zh-CN/docs/Glossary/Primitive)或者对象引用
**`Set()`** 构造函数创建 {{jsxref("Set")}} 对象

{{EmbedInteractiveExample("pages/js/set-prototype-constructor.html")}}

Expand All @@ -21,7 +21,7 @@ new Set(iterable)
### 参数

- `iterable` {{optional_inline}}
- : 如果传递一个[可迭代对象](/zh-CN/docs/Web/JavaScript/Reference/Statements/for...of),它的所有元素将不重复地被添加到新的 `Set` 中。如果不指定此参数或其值为 `null`,则新的 `Set` 为空。
- : 如果传入一个[可迭代对象](/zh-CN/docs/Web/JavaScript/Reference/Statements/for...of),它的所有元素将不重复地被添加到新的 `Set` 中。如果不指定此参数或其值为 `null`,则新的 `Set` 为空。

### 返回值

Expand Down Expand Up @@ -52,5 +52,5 @@ mySet.add(o);

## 参见

- [Polyfill of `Set` in `core-js`](https://github.com/zloirock/core-js#set)
- [`core-js` 中 `Set` 的 polyfill](https://github.com/zloirock/core-js#set)
- {{jsxref("Set")}}