es6クラスは関数ですか?

Apr 11, 2022 pm 02:37 PM
class es6 関数

es6 クラスは関数です。 es6 では、オブジェクトのテンプレートとしてクラス (class) が導入されました。クラスは、class キーワードを通じて定義できます。構文は「class クラス名 {...}」です。クラスの本質は関数 (関数) であり、構文シュガー。最下層は「コンストラクター」によって作成されます。

es6クラスは関数ですか?

このチュートリアルの動作環境: Windows7 システム、ECMAScript バージョン 6、Dell G3 コンピューター。

es6 クラスは関数です。

#ES6 では、オブジェクトのテンプレートとしてクラス (class) が導入され、class キーワードを通じてクラスを定義できます。

# #class の本質は関数です。

これは構文糖衣とみなすことができ、その最下層は

constructor

を通じて作成され、オブジェクト プロトタイプは、より明確に、オブジェクト指向プログラミングの構文に似て記述されています。<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>function Person(name, age) { this.name = name; this.age = age; } Person.prototype.sayName = function() { return this.name; } const xiaoming = new Person(&amp;#39;小明&amp;#39;, 18); console.log(xiaoming);</pre><div class="contentsignin">ログイン後にコピー</div></div>上記のコードは、ES6 の

class

(次の <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>class Person { constructor(name, age) { this.name = name; this.age = age; } sayName() { return this.name; } } const xiaoming = new Person(&amp;#39;小明&amp;#39;, 18) console.log(xiaoming); // { name: &amp;#39;小明&amp;#39;, age: 18 } console.log((typeof Person)); // function console.log(Person === Person.prototype.constructor); // true</pre><div class="contentsignin">ログイン後にコピー</div></div> コンストラクター) を使用して実装されています。メソッド、これはコンストラクター メソッドであり、this キーワードはインスタンス オブジェクトを表します。クラスのデータ型は関数であり、クラス自体はコンストラクターを指します。

クラスを定義するときは、関数を前に追加する必要はなく、メソッドをカンマで区切る必要もありません。追加するとエラーが報告されます。

クラスのすべてのメソッドは、クラスのプロトタイプ属性。
class A {
    constructor() {}
    toString() {}
    toValue() {}
}
// 等同于
function A () {
    // constructor
};
A.prototype.toString = function() {};
A.prototype.toValue = function() {};
ログイン後にコピー

クラスのインスタンスのメソッドを呼び出すことは、実際にはプロトタイプのメソッドを呼び出すことになります。

#
let a = new A();
a.constructor === A.prototype.constructor // true
ログイン後にコピー

クラスのインスタンス

インスタンスの属性がそれ自体で明示的に定義されていない限り (つまり、このオブジェクトで定義されていない限り)、それらはプロトタイプで定義されます (つまり、クラスで定義されています)。

注:

1. クラスの変数昇格はありません

new A(); // ReferenceError
class A {}
ログイン後にコピー

ES6 はクラス宣言をコードの先頭に昇格させないため、この規定の理由は継承に関連しているため、サブクラスは親クラスの後に定義されています。

{
  let A = class {};
  class B extends A {}
}
ログイン後にコピー

B が A を継承するとき、A にはすでに定義があるため、上記のコードはエラーを報告しません。ただし、クラスの昇格がある場合、上記のコードはエラーになります。クラスがコードの先頭に昇格されるため、「」が報告されますが、let コマンドは昇格されないため、B が A を継承する場合、Foo は定義されていません。には、デフォルトでクラスのインスタンスを指す this が含まれています。ただし、十分に注意する必要があります。このメソッドを単独で使用すると、エラーが報告される可能性があります。

クラスは extends キーワードを渡すことができます。継承の実装

class Animal {}
class Cat extends Animal { };
ログイン後にコピー

上記のコードは、extends キーワードを通じて Animal クラスのすべてのプロパティとメソッドを継承する Cat クラスを定義します。ただし、コードがデプロイされていないため、2 つのクラスはまったく同じであり、Animal クラスをコピーするのと同じです。次に、Cat 内にコードを追加します。

class Cat extends Animal {
    constructor(name, age, color) {
        // 调用父类的constructor(name, age)
        super(name, age);
        this.color = color;
    }
    toString() {
        return this.color + &#39; &#39; + super.toString(); // 调用父类的toString()
    }
}
ログイン後にコピー

super キーワードは、コンストラクター メソッドと toString メソッドの両方に表示されます。ここでは、親クラスのコンストラクターを表し、親クラスの新しい this オブジェクトを作成するために使用されます。 サブクラスはコンストラクター メソッドでスーパー メソッドを呼び出す必要があります。そうしないと、新しいインスタンスの作成時にエラーが報告されます。 これは、サブクラス独自の this オブジェクトが、親クラスと同じインスタンス属性とメソッドを取得するために、まず親クラスのコンストラクターによって整形され、その後処理されて、サブクラス独自のインスタンス属性とメソッドが追加されるためです。スーパー メソッドが呼び出されない場合、サブクラスはこのオブジェクトを取得しません。

class Animal { /* ... */ }

class Cat extends Animal {
  constructor() {
  }
}

let cp = new Cat();
// ReferenceError
ログイン後にコピー

Cat は親クラス Animal を継承しますが、そのコンストラクターがスーパー メソッドを呼び出さないため、新しいインスタンスがエラーを報告します。

サブクラスにコンストラクター メソッドが定義されていない場合、デフォルトでこのメソッドが追加されます。コードは次のとおりです。つまり、明示的に定義されているかどうかに関係なく、サブクラスにはコンストラクター メソッドがあります。

class Cat extends Animal {

}
// 等同于

class Cat extends Animal {
    constructor(...args) {
        super(...args);
    }
}
ログイン後にコピー

もう 1 つ注意すべき点は、es5 コンストラクターは親コンストラクターを呼び出す前にこれにアクセスできますが、es6 コンストラクターは親コンストラクター (つまりスーパー) を呼び出す前にこれにアクセスできないことです。

class A {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }
}

class B extends A {
  constructor(x, y, name) {
    this.name = name; // ReferenceError
    super(x, y);
    this.name = name; // 正确
  }
}
ログイン後にコピー

上記のコードでは、サブクラスのコンストラクタメソッドが super を呼び出す前に this キーワードを使用しており、エラーが報告されていますが、super メソッドの後に置くのが正しいです。

親クラスの静的メソッドはサブクラスにも継承されます。

class A {
  static hello() {
    console.log(&#39;hello world&#39;);
  }
}

class B extends A {
}

B.hello()  // hello world
ログイン後にコピー

【関連する推奨事項:

JavaScript ビデオ チュートリアル

Web フロントエンド

]

以上がes6クラスは関数ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

golang 関数で新しい関数を動的に作成するためのヒント golang 関数で新しい関数を動的に作成するためのヒント Apr 25, 2024 pm 02:39 PM

Go 言語は、クロージャとリフレクションという 2 つの動的関数作成テクノロジを提供します。クロージャを使用すると、クロージャ スコープ内の変数にアクセスでき、リフレクションでは FuncOf 関数を使用して新しい関数を作成できます。これらのテクノロジーは、HTTP ルーターのカスタマイズ、高度にカスタマイズ可能なシステムの実装、プラグイン可能なコンポーネントの構築に役立ちます。

C++ 関数の命名におけるパラメーターの順序に関する考慮事項 C++ 関数の命名におけるパラメーターの順序に関する考慮事項 Apr 24, 2024 pm 04:21 PM

C++ 関数の名前付けでは、読みやすさを向上させ、エラーを減らし、リファクタリングを容易にするために、パラメーターの順序を考慮することが重要です。一般的なパラメータの順序規則には、アクション-オブジェクト、オブジェクト-アクション、意味論的な意味、および標準ライブラリへの準拠が含まれます。最適な順序は、関数の目的、パラメーターの種類、潜在的な混乱、および言語規約によって異なります。

Java で効率的で保守しやすい関数を記述するにはどうすればよいでしょうか? Java で効率的で保守しやすい関数を記述するにはどうすればよいでしょうか? Apr 24, 2024 am 11:33 AM

効率的で保守しやすい Java 関数を作成するための鍵は、シンプルに保つことです。意味のある名前を付けてください。特殊な状況に対処します。適切な可視性を使用してください。

Excel関数の公式の完全なコレクション Excel関数の公式の完全なコレクション May 07, 2024 pm 12:04 PM

1. SUM 関数は、列またはセルのグループ内の数値を合計するために使用されます (例: =SUM(A1:J10))。 2. AVERAGE 関数は、列またはセルのグループ内の数値の平均を計算するために使用されます (例: =AVERAGE(A1:A10))。 3. COUNT 関数。列またはセルのグループ内の数値またはテキストの数をカウントするために使用されます。例: =COUNT(A1:A10)。 4. IF 関数。指定された条件に基づいて論理的な判断を行い、結果を返すために使用されます。対応する結果。

C++関数のデフォルトパラメータと可変パラメータの長所と短所の比較 C++関数のデフォルトパラメータと可変パラメータの長所と短所の比較 Apr 21, 2024 am 10:21 AM

C++ 関数のデフォルト パラメーターの利点には、呼び出しの簡素化、可読性の向上、エラーの回避などがあります。欠点は、柔軟性が限られていることと、名前の制限があることです。可変引数パラメーターの利点には、無制限の柔軟性と動的バインディングが含まれます。欠点としては、複雑さの増大、暗黙的な型変換、デバッグの難しさなどが挙げられます。

参照型を返す C++ 関数の利点は何ですか? 参照型を返す C++ 関数の利点は何ですか? Apr 20, 2024 pm 09:12 PM

C++ で参照型を返す関数の利点は次のとおりです。 パフォーマンスの向上: 参照による受け渡しによりオブジェクトのコピーが回避され、メモリと時間が節約されます。直接変更: 呼び出し元は、返された参照オブジェクトを再割り当てせずに直接変更できます。コードの簡素化: 参照渡しによりコードが簡素化され、追加の代入操作は必要ありません。

カスタム PHP 関数と定義済み関数の違いは何ですか? カスタム PHP 関数と定義済み関数の違いは何ですか? Apr 22, 2024 pm 02:21 PM

カスタム PHP 関数と定義済み関数の違いは次のとおりです。 スコープ: カスタム関数はその定義のスコープに限定されますが、事前定義関数はスクリプト全体からアクセスできます。定義方法: カスタム関数は function キーワードを使用して定義されますが、事前定義関数は PHP カーネルによって定義されます。パラメータの受け渡し: カスタム関数はパラメータを受け取りますが、事前定義された関数はパラメータを必要としない場合があります。拡張性: カスタム関数は必要に応じて作成できますが、事前定義された関数は組み込みで変更できません。

C++ 関数例外の詳細: カスタマイズされたエラー処理 C++ 関数例外の詳細: カスタマイズされたエラー処理 May 01, 2024 pm 06:39 PM

C++ の例外処理は、特定のエラー メッセージ、コンテキスト情報を提供し、エラーの種類に基づいてカスタム アクションを実行するカスタム例外クラスを通じて強化できます。 std::Exception から継承した例外クラスを定義して、特定のエラー情報を提供します。カスタム例外をスローするには、throw キーワードを使用します。 try-catch ブロックでdynamic_castを使用して、キャッチされた例外をカスタム例外タイプに変換します。実際の場合、open_file 関数は FileNotFoundException 例外をスローします。例外をキャッチして処理すると、より具体的なエラー メッセージが表示されます。

See all articles