Skip to content

Commit

Permalink
[zh-cn]: update the description of the new operator (#17065)
Browse files Browse the repository at this point in the history
Co-authored-by: Allo <[email protected]>
  • Loading branch information
zhang-stone and yin1999 authored Nov 23, 2023
1 parent 6da1704 commit 85bdefb
Showing 1 changed file with 17 additions and 10 deletions.
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

0 comments on commit 85bdefb

Please sign in to comment.