es6クラスは関数ですか?
es6 クラスは関数です。 es6 では、オブジェクトのテンプレートとしてクラス (class) が導入されました。クラスは、class キーワードを通じて定義できます。構文は「class クラス名 {...}」です。クラスの本質は関数 (関数) であり、構文シュガー。最下層は「コンストラクター」によって作成されます。
このチュートリアルの動作環境: 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(&#39;小明&#39;, 18);
console.log(xiaoming);</pre><div class="contentsignin">ログイン後にコピー</div></div>
上記のコードは、ES6 の
(次の <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(&#39;小明&#39;, 18)
console.log(xiaoming);
// { name: &#39;小明&#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 + ' ' + 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('hello world'); } } class B extends A { } B.hello() // hello world
【関連する推奨事項:
JavaScript ビデオ チュートリアル、
Web フロントエンド]
以上がes6クラスは関数ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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