ホームページ >ウェブフロントエンド >jsチュートリアル >Javascript_javascriptスキルでクラスを定義する3つの方法を詳しく解説
約 20 年前、JavaScript が誕生したとき、それは単なる単純な Web スクリプト言語でした。ユーザー名を入力するのを忘れた場合は、警告がポップアップ表示されます。
現在では、フロントエンドからバックエンドに至るまで、あらゆる種類の信じられないほどの用途があり、ほぼ万能となっています。プログラマーはこれを使用して、ますます大規模なプロジェクトを完了します。
JavaScript コードの複雑さも急増しています。 1 つの Web ページに 10,000 行の Javascript コードが含まれることは長い間一般的でした。 2010 年に、あるエンジニアは Gmail のコードの長さが 443,000 行であることを明らかにしました。
このような複雑なコードを作成して保守するには、モジュール化された戦略が必要です。現在、業界では「オブジェクト指向プログラミング」を採用するアプローチが主流となっています。そのため、JavaScript でオブジェクト指向プログラミングを実装する方法が注目されています。
問題は、JavaScript 構文が「クラス」(クラス) をサポートしていないため、従来のオブジェクト指向プログラミング手法を直接使用できないことです。プログラマーは、JavaScript で「クラス」をシミュレートする方法について多くの研究を行ってきました。この記事では、JavaScript で「クラス」を定義する 3 つの方法を要約し、それぞれの方法の特徴について説明し、私の目から見た最良の方法に焦点を当てます。
==============================================
JavaScript でクラスを定義する 3 つの方法
オブジェクト指向プログラミングでは、クラスはオブジェクトのテンプレートであり、同じオブジェクトのグループ (「インスタンス」とも呼ばれます) に共通のプロパティとメソッドを定義します。
JavaScript 言語は「クラス」をサポートしていませんが、いくつかの回避策を使用して「クラス」をシミュレートできます。
1. コンストラクターメソッド
これは古典的な方法であり、教科書で必ず教えられる方法です。コンストラクターを使用して「クラス」をシミュレートし、内部で this キーワードを使用してインスタンス オブジェクトを参照します。
クラスの属性とメソッドは、コンストラクターのプロトタイプ オブジェクトで定義することもできます。
2. Object.create() メソッド
「コンストラクター メソッド」の欠点を解決し、より便利にオブジェクトを生成するために、JavaScript の国際標準である ECMAScript の第 5 版 (現在は第 3 版が普及しています) では、新しいメソッド Object.create() が提案されています。 。
このメソッドでは、「クラス」は関数ではなくオブジェクトになります。
3. ミニマリズム手法
オランダのプログラマー、Gabor de Mooij は、Object.create() よりも優れた新しいメソッドを提案し、彼はこれを「ミニマリスト アプローチ」と呼びました。これも私がオススメする方法です。
3.1 梱包
このメソッドは this とプロトタイプを使用せず、コードが非常に簡単にデプロイできるため、おそらく「ミニマリストメソッド」と呼ばれます。
まず、「クラス」をシミュレートするためにオブジェクトも使用します。このクラスでは、インスタンスを生成するためのコンストラクター createNew() を定義します。
次に、createNew() でインスタンス オブジェクトを定義し、このインスタンス オブジェクトを戻り値として使用します。
使用する場合は、createNew() メソッドを呼び出してインスタンス オブジェクトを取得します。
この方法の利点は、理解しやすく、明確で洗練された構造を持ち、従来の「オブジェクト指向プログラミング」構造に準拠しているため、次の機能を簡単に導入できることです。
3.2 継承
あるクラスが別のクラスを継承できるようにすると、実装が非常に便利になります。前者の createNew() メソッド内で後者の createNew() メソッドを呼び出すだけです。
まず、Animal クラスを定義します。
次に、Cat の createNew() メソッドで、Animal の createNew() メソッドを呼び出します。
3.3 プライベート プロパティとプライベート メソッド
createNew() メソッドでは、cat オブジェクトで定義されていないすべてのメソッドとプロパティはプライベートです。
3.4 データ共有
場合によっては、すべてのインスタンス オブジェクトが同じ内部データを読み書きできるようにする必要があります。この時点では、内部データをクラス オブジェクト内および createNew() メソッドの外にカプセル化するだけです。
次に、2 つのインスタンス オブジェクトを生成します。
(終了)