アロー関数の復号化: 新規 アロー関数では何が起こりますか?

アロー関数 (アロー関数) は、関数の作成方法を簡素化し、スコープ バインディングを改善する ES6 で導入された強力な機能です。ただし、アロー関数には従来の関数式との重要な違いがいくつかあり、その 1 つはコンストラクターとしての使用に適していないことです。この記事では、この問題をさらに深く掘り下げ、アロー関数を使用するとnew何が起こるかを理解します。

アロー関数の概要

まず、アロー関数の基本的な構文を確認してみましょう。

// 代码
const add = (a, b) => a + b;

アロー関数は、匿名関数を作成し、これを外部コンテキストに自動的にバインドするためによく使用されます。これにより、アロー関数は、コールバック関数を使用してコードを簡素化するときに非常に便利になります。

newなぜアロー関数を使用してはいけないのでしょうか?

JavaScript では、new演算子を使用してオブジェクトのインスタンスを作成できます。通常、これを実現するにはコンストラクターを使用します。次に例を示します。

// 代码
function Person(name) {
  this.name = name;
}

const person = new Person('Alice');

ただし、アロー関数は独自のバインディングを持たずthis、アロー関数が作成されたコンテキストをキャプチャしますthisそのため、通常の関数のようにコンストラクターとして使用することはできません。

アロー関数を使用しようとすると、newエラーが発生します。

// 代码
const Example = () => {
  this.value = 42;
};

const インスタンス = 新しい Example(); // TypeError: 例はコンストラクターではありません

上記の例では、キーワードを使用して a のインスタンスをnew作成しようとしていますが、これはアロー関数であるため、コンストラクター機能がないため、 がスローされますExampleExampleTypeError

コード例

これをよりよく理解するために、実際の例を見てみましょう。単純なオブジェクトを作成するアロー関数があるとします。

// 代码
const createPerson = (name) => ({
  name,
});

const person = createPerson('Bob');
console.log(person); // { name: 'Bob' }

上記の createPersonal 関数は、name 属性を含むオブジェクト リテラルを返します。この関数はこのバインディングを必要としないため、アロー関数とうまく連携します。

要約する

JavaScript では、アロー関数は非常に強力で便利ですが、コンストラクターとしての使用には適していません。したがって、エラーの発生を避けるために、アロー関数のインスタンス化に new を使用しないようにしてください。インスタンス化可能なオブジェクトを作成する必要がある場合でも、従来のコンストラクターまたはクラスを使用する必要があります。アロー関数は、オブジェクトのインスタンス化のためではなく、関数式の記述を簡素化するために設計されています。

おすすめ

転載: blog.csdn.net/JaneLittle/article/details/132451263