Skip to content

Commit

Permalink
[zh-cn]: update the translation of ArrayBuffer.@@species (#17014)
Browse files Browse the repository at this point in the history
  • Loading branch information
JasonLamv-t authored Nov 20, 2023
1 parent ce5eb11 commit 620d011
Showing 1 changed file with 36 additions and 8 deletions.
Original file line number Diff line number Diff line change
@@ -1,35 +1,63 @@
---
title: get ArrayBuffer[@@species]
title: ArrayBuffer[@@species]
slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/@@species
---

{{JSRef}}

**`ArrayBuffer[@@species]`** 访问器属性会返回 `ArrayBuffer` 构造器。
**`ArrayBuffer[@@species]`** 静态访问器属性返回用于构造数组缓冲区方法返回值的构造函数。

> **警告:** `@@species` 的存在允许任意代码执行,并可能产生安全漏洞。这也使某些优化变得更加困难。引擎实现者正在[调查是否删除此特性](https://github.com/tc39/proposal-rm-builtin-subclassing)。如果可能的话,请避免依赖它。
## 语法

```plain
```js-nolint
ArrayBuffer[Symbol.species]
```

### 返回值

调用 `get @@species` 的构造函数(`this`)的值。该返回值被用于构造创建新的数组缓冲区的数组缓冲区方法的返回值。

## 描述

这个 species 访问器属性会返回默认的 `ArrayBuffer` 构造器。子类构造器可能会覆盖它以改变构造器赋值。
`@@species` 访问器属性返回 `ArrayBuffer` 对象的默认构造函数。子类构造函数可以重写它来更改构造函数赋值。基本的默认实现是:

```js
// 用于说明的假设基础实现
class ArrayBuffer {
static get [Symbol.species]() {
return this;
}
}
```

由于这种多态实现,派生子类的 `@species` 也将默认返回构造函数本身。

```js
class SubArrayBuffer extends ArrayBuffer {}
SubArrayBuffer[Symbol.species] === SubArrayBuffer; // true
```

当调用不会修改现有对象,而是返回一个新的数组缓冲区实例数组缓冲区方法(例如,[`slice()`](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/slice))时,对象的 `constructor[@@species]` 将被访问。返回的构造函数将用于构造该数组缓冲区方法的返回值。

## 示例

返回默认的 `ArrayBuffer` 构造器:
### 普通对象中的 species

`@@species` 属性返回默认构造函数,即 `ArrayBuffer` 构造函数。

```js
ArrayBuffer[Symbol.species]; // function ArrayBuffer()
```

在派生集合对象中(比如你定制的 array buffer `MyArrayBuffer`),`MyArrayBuffer` species 就是 `MyArrayBuffer` 构造器。但是,你可能想要在派生类里重写它,以期返回的是父类的 `ArrayBuffer` 对象:
### 派生对象中的 species

在一个自定义的 `ArrayBuffer` 子类实例中,例如 `MyArrayBuffer``MyArrayBuffer``species``MyArrayBuffer` 构造函数。但是,你可能希望重写它,以便在派生类方法中返回父类 `ArrayBuffer` 对象:

```js
class MyArrayBuffer extends ArrayBuffer {
// Overwrite MyArrayBuffer species to the parent ArrayBuffer constructor
// 重写 MyArrayBuffer species 来返回父类 ArrayBuffer 构造函数
static get [Symbol.species]() {
return ArrayBuffer;
}
Expand All @@ -44,7 +72,7 @@ class MyArrayBuffer extends ArrayBuffer {

{{Compat}}

## 相关
## 参见

- {{jsxref("ArrayBuffer")}}
- {{jsxref("Symbol.species")}}

0 comments on commit 620d011

Please sign in to comment.