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 description of the new operator #17065

Merged
merged 6 commits into from
Nov 23, 2023
Merged
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
27 changes: 17 additions & 10 deletions files/zh-cn/web/javascript/reference/operators/new/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,34 @@ slug: Web/JavaScript/Reference/Operators/new

## 语法

```plain
new constructor[([arguments])]
```js-nolint
new constructor
new constructor()
new constructor(arg1)
new constructor(arg1, arg2)
new constructor(arg1, arg2, /* …, */ argN)
```

### 参数

- `constructor`
- : 一个指定对象实例的类型的类或函数。
- `arguments`
- : 一个用于被 `constructor` 调用的参数列表
- `arg1`、`arg2`、……、`argN`
- : 一个用于被 `constructor` 调用的值列表。`new Foo` 与 `new Foo()` 等价,例如:如果没有指定参数列表,则在不带参数的情况下调用 `Foo`

## 描述

**`new`** 关键字会进行如下的操作
当使用 **`new`** 关键字调用函数时,该函数将被用作构造函数。`new` 将执行以下操作

1. 创建一个空的简单 JavaScript 对象(即 **`{}`**);
2. 为步骤 1 新创建的对象添加属性 **`__proto__`**,将该属性链接至构造函数的原型对象;
3. 将步骤 1 新创建的对象作为 **`this`** 的上下文;
4. 如果该函数没有返回对象,则返回 **`this`**。
1. 创建一个空的简单 JavaScript 对象。为方便起见,我们称之为 `newInstance`。
2. 如果构造函数的 `prototype` 属性是一个{{jsxref("Object", "对象", "", 1)}},则将 `newInstance` 的 [[Prototype]] 指向构造函数的这个属性,否则 `newInstance` 将保持为一个普通对象,其 [[Prototype]] 为 `Object.prototype`。

(译注:关于对象的 **`constructor`**,参见 **`Object.prototype.constructor`**)
> **备注:** 因此,通过构造函数创建的所有实例都可以访问添加到构造函数 `prototype` 属性中的属性/对象。

3. 使用给定参数执行构造函数,并将 `newInstance` 绑定为 [`this`](/zh-CN/docs/Web/JavaScript/Reference/Operators/this) 的上下文(例如,在构造函数中的所有 `this` 引用都指向 `newInstance`)。
4. 如果构造函数返回[非原始值](/zh-CN/docs/Web/JavaScript/Data_structures#原始值),则该返回值成为整个 `new` 表达式的结果。否则,如果构造函数未返回任何值或返回了一个原是值,则返回 `newInstance`。(通常构造函数不返回值,但可以选择返回值,以覆盖正常的对象创建过程。)

[类](/zh-CN/docs/Web/JavaScript/Reference/Classes)只能用 `new` 运算符实例化——尝试不使用 `new` 调用一个类将抛出 `TypeError`。

创建一个用户自定义的对象需要两步:

Expand Down