JavaScriptで関数を使ってクラスインスタンスを定義する使い方を詳しく解説
まず例で説明します:
function myClass() { var id = 1; var name = "johnson"; //properties this.ID = id; this.Name = name; //method this.showMessage = function() { alert("ID: " + this.ID + ", Name: " + this.Name); } } var obj1 = new myClass(); var obj2 = new myClass();
関数の定義は実際にはクラスのコンストラクターに相当し、最後の 2 つの文はこのクラスのインスタンスを作成するものです。まず最初の文を分析しましょう: var obj1 = new myClass(); new を使用してクラスのインスタンスを作成する場合、インタープリターは最初に空のオブジェクトを作成します。次に、この myClass 関数を実行し、このポインターがこのクラスのインスタンスを指すようにします。 this.ID = id; と this.Name = name; および this.showMessage = function(){...} が発生すると、これら 2 つのプロパティと this メソッドが作成され、変数 id と name は次のようになります。値レベルの関数は、これら 2 つのプロパティとこの関数オブジェクト (shwoMessage) に割り当てられます。このプロセスは、C# のコンストラクターと同様に、オブジェクトの初期化に相当します。最後に new はこのオブジェクトを返します。 2 番目の文を見てください: var obj2 = new myClass(); 実行プロセスは前の文と同じです。つまり、空のオブジェクトを作成し、myClass 関数を実行して 2 つのプロパティと 1 つのメソッドを定義します。
上記の分析からわかるように、クラスを実装する上記の方法は、関数の定義でクラスの属性メソッドを定義することです。デメリットもあります。上に示したように、このクラスのインスタンスを 2 つ以上作成する必要がある場合、これらのプロパティは複数回作成されます。
では、この状況を回避するにはどうすればよいでしょうか?プロトタイプはその名前のようにプロトタイプです。各関数にはサブオブジェクト プロトタイプがあり、実際にはこの関数オブジェクトのメンバーのコレクションを表します。ここでは、プロトタイプが実際にはクラス A であると言えます。メンバーの集合体。プロトタイプによって定義されたプロパティとメソッドは、関数のコンストラクターが実行される前に実行されるため、オブジェクトが新しくなる前に、プロトタイプのメンバーが実際に実行されます。まず例を見てみましょう。
function myClass() { //构造函数 } myClass.prototype = { ID: 1, Name: "johnson", showMessage: function() { alert("ID: " + this.ID + ", Name: " + this.Name); } } var obj1 = new myClass(); var obj2 = new myClass();
クラスの構造は前の例と同じですが、ここではプロトタイプを使用して実装されています。まず最後の 2 つの文を見てみましょう。前述したように、プロトタイプは関数コンストラクターの前、つまり var obj1 = new myClass(); が実行される前に、このクラスにはすでに ID、Name 属性、および showMessage メソッドが含まれています。エグゼキュータが文を記述するときの実行プロセスは次のとおりです。前の例との比較に注意してください。まず、空のオブジェクトを作成し、this ポインタをこのオブジェクトにポイントします。次に、関数のプロトタイプ オブジェクトのすべてのメンバーをこのオブジェクトに割り当てます (これらのメンバーは再度作成されないことに注意してください)。次に関数本体を実行します。最後に new はこのオブジェクトを返します。次の文を実行するとき: この処理も実行され、これらのメンバーが繰り返し作成されることはありません。
上記のコードは単なる例です。実際のプロジェクトでは、クラス内に多数のメンバーが存在し、多数のインスタンスを作成する必要がある場合があります。このプロトタイプがその優位性を示すでしょう。さらに、上記のコードは中括弧構文を使用してプロトタイプのメンバーを定義しているため、コードがより明確になります。これは推奨されるクラス設計パターンです。もちろん、多くのプロジェクトでは、より最適化された JavaScript プログラミング モデルが見つかる可能性があり、今後も新しいモデルが導入されることを期待しています。 。
上記のように、プロトタイプで定義されたメンバーはコンストラクターの前に存在します。 var obj1 = new を実行すると、コンストラクターが空であることがわかります。 myClass(); を実行すると、正しい属性値を示すポップアップ ダイアログ ボックスが表示されます。
次のコード:
function subClass(){ } subClass.prototype = { Name: "sub" } function myClass() { //构造函数 } myClass.prototype = { ID: 1, Name: "johnson", SubObj: new subClass(), showMessage: function() { alert("ID: " + this.ID + ", Name: " + this.Name + "SubObj.Name:" + this.SubObj.Name); } } var obj1 = new myClass(); obj1.SubObj.Name = "XXX"; obj1.showMessage(); var obj2 = new myClass(); obj2.showMessage();
ここでは myClass で参照型が定義されており、その型はカスタマイズしたサブクラス クラスです。 このサブクラスには Name 属性があります。プロトタイプ オブジェクトは共有されているため、上記の分析によれば、var obj1 = new myClass(); を実行すると、myClass のプロトタイプのメンバーがこの obj1 インスタンスにコピーされます。ただし、ここでの SubObj は参照型です。 var obj2 = new myClass(); が実行されると、プロトタイプ内の ID および Name メンバーは obj2 にコピーされますが、SubObj 属性はコピーされず、プロトタイプ内で参照されます。 .SubObj なので、前の文で obj1.Subobj.Name の値が変更されているため、new を使用して obj2 インスタンスを生成すると、変更された値が参照されます。
そのため、プロトタイプを使用してクラスを定義する場合でも、コンストラクターでプロパティを定義し、コンストラクターのプロトタイプでメソッドを定義する必要があります。以下の通り:
以上がJavaScriptで関数を使ってクラスインスタンスを定義する使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック











顔の検出および認識テクノロジーは、すでに比較的成熟しており、広く使用されているテクノロジーです。現在、最も広く使用されているインターネット アプリケーション言語は JS ですが、Web フロントエンドでの顔検出と認識の実装には、バックエンドの顔認識と比較して利点と欠点があります。利点としては、ネットワーク インタラクションの削減とリアルタイム認識により、ユーザーの待ち時間が大幅に短縮され、ユーザー エクスペリエンスが向上することが挙げられます。欠点としては、モデル サイズによって制限されるため、精度も制限されることが挙げられます。 js を使用して Web 上に顔検出を実装するにはどうすればよいですか? Web 上で顔認識を実装するには、JavaScript、HTML、CSS、WebRTC など、関連するプログラミング言語とテクノロジに精通している必要があります。同時に、関連するコンピューター ビジョンと人工知能テクノロジーを習得する必要もあります。 Web 側の設計により、次の点に注意してください。

MySQL の複合主キーは、テーブル内の複数のフィールドで構成される主キーを指し、各レコードを一意に識別するために使用されます。単一の主キーとは異なり、複合主キーは複数のフィールドの値を組み合わせて形成されます。テーブルを作成するときに、複数のフィールドを主キーとして指定することにより、複合主キーを定義できます。複合主キーの定義と機能を示すために、最初に users という名前のテーブルを作成します。このテーブルには、id、ユーザー名、電子メールの 3 つのフィールドが含まれます。id は自動インクリメントされる主キー、ユーザーです。

「Discuz の探索: 定義、機能、およびコード例」 インターネットの急速な発展に伴い、コミュニティ フォーラムは人々が情報を取得し、意見を交換するための重要なプラットフォームになりました。多くのコミュニティ フォーラム システムの中でも、Discuz は中国でよく知られたオープン ソース フォーラム ソフトウェアとして、大多数の Web サイト開発者や管理者に好まれています。それで、ディスカスとは何ですか?どのような機能があり、Web サイトにどのように役立つのでしょうか?この記事では、Discuz について詳しく紹介し、読者がDiscuz についてさらに学ぶのに役立つ具体的なコード例を添付します。

インターネット金融の急速な発展に伴い、株式投資を選択する人がますます増えています。株式取引では、ローソク足チャートは一般的に使用されるテクニカル分析手法であり、株価の変化傾向を示し、投資家がより正確な意思決定を行うのに役立ちます。この記事では、PHP と JS の開発スキルを紹介し、株価ローソク足チャートの描画方法を読者に理解してもらい、具体的なコード例を示します。 1. 株のローソク足チャートを理解する 株のローソク足チャートの描き方を紹介する前に、まずローソク足チャートとは何かを理解する必要があります。ローソク足チャートは日本人が開発した

PHP インターフェースの概要とその定義方法 PHP は、Web 開発で広く使用されているオープンソースのスクリプト言語であり、柔軟性があり、シンプルで強力です。 PHP では、インターフェイスは複数のクラス間で共通のメソッドを定義し、ポリモーフィズムを実現し、コードをより柔軟で再利用可能にするツールです。この記事では、PHP インターフェイスの概念とその定義方法を紹介し、その使用法を示す具体的なコード例を示します。 1. PHP インターフェイスの概念 インターフェイスはオブジェクト指向プログラミングにおいて重要な役割を果たし、クラス アプリケーションを定義します。

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

js と vue の関係: 1. Web 開発の基礎としての JS、2. フロントエンド フレームワークとしての Vue.js の台頭、3. JS と Vue の補完関係、4. JS と Vue の実用化ビュー。

全角文字とは何ですか?コンピュータ エンコード システムでは、全幅文字は 2 つの標準文字位置を占める文字エンコード方法です。これに対応して、標準の文字位置を占める文字エンコード方式を半角文字と呼びます。全角文字は通常、中国語、日本語、韓国語、その他のアジアの文字の入力、表示、印刷に使用されます。中国語の入力方法やテキスト編集では、全角文字と半角文字の使用シーンが異なります。全角文字の使用 中国語の入力方法: 中国語の入力方法では、通常、漢字や記号などの中国語の文字を入力するために全角文字が使用されます。
