JavaScriptでオブジェクト指向クラスを実現するための簡単な説明_基礎知識
オブジェクトとは、最も単純な整数から複雑な飛行機に至るまで、人々が研究したいあらゆるものであり、特定のものを表すだけでなく、抽象的なルール、計画、またはイベントを表すこともできます。 --百度百科事典より引用
オブジェクト指向プログラミングは、現在最も人気のあるプログラミング モデルです。しかし、もどかしいのは、最も広く使用されているフロントエンド アプリケーションである JavaScript がオブジェクト指向プログラミングをサポートしていないことです。
JavaScript にはアクセス制御文字がありません。クラスを定義するキーワード class もありません。継承のための extend やコロンもサポートされていません。また、仮想関数をサポートするために virtual を使用しません。ただし、JavaScript は柔軟です。言語に従ってみましょう。 class というキーワードを持たない Javascript がどのようにクラス定義を実装し、オブジェクトを作成するかを見てみましょう。
クラスを定義し、クラスのインスタンス オブジェクトを作成します
JavaScript では、次のように関数を使用してクラスを定義します。
関数 Shape()
{
var x=1;
var y=2;
}
疑うかもしれませんね?これは決定的な機能ではないでしょうか?はい、これは定義関数です。Shape 関数を定義し、x と y を初期化します。しかし、別の見方をすると、これは x と y の 2 つの属性を持つ Shape クラスを定義することになり、初期値はそれぞれ 1 と 2 になります。ただし、その定義に使用するキーワードは次のとおりです。 class はクラスではなく関数です。
次に、次のように、Shape クラスのオブジェクト aShape を作成できます。
var aShape = 新しい Shape();
パブリック プロパティとプライベート プロパティを定義する
aShape オブジェクトを作成しましたが、そのプロパティにアクセスしようとすると、次のようなエラーが発生します:
{
This.x=1;
This.y=2;
}
JavaScript では、関数は Function クラスのインスタンスであるため、関数はオブジェクトでもあります。したがって、代入メソッドを使用して関数を作成することもできます。関数をクラスに割り当てると、この属性変数は実行可能な関数であるため、メソッドを呼び出すことができます。コードは次のとおりです:
var x=0;
var y=1;
This.draw=function()
{
//print;
};
}
var で定義されている場合、この描画はプライベートになります。これは、OOP ではプライベート メソッドと呼ばれます。
コードをコピー
関数 Shape()
{
var x=0;
var y=1;
vardraw=function()
{
//print;
};
}
この方法では、aShape.draw を使用してこの関数を呼び出すことはできません。
コンストラクター
JavaScript は OOP をサポートしておらず、もちろんコンストラクターはありません。ただし、コンストラクターを自分でシミュレートし、オブジェクトの作成時に自動的に呼び出すことができます。コードは次のとおりです。
{
var init = function()
{
//コンストラクターコード
};
init();
}
パラメータを持つコンストラクター
コンストラクターにパラメーターを取得させるにはどうすればよいですか?実際、これは非常に簡単です。のように、関数のパラメーター リストに渡すパラメーターを記述するだけです。
{
var x=0;
var y=0;
var init = function()
{
//コンストラクター
x=ax;
y=ay;
};
init();
}
;
静的プロパティと静的メソッド
JavaScript で静的プロパティとメソッドを定義するにはどうすればよいですか?以下に示すように:
{
var x=0;
var y=0;
var init = function()
{
//コンストラクター
x=ax;
y=ay;
};
init();
}
Shape.count=0; //この属性はオブジェクトではなくクラスに属します。
Shape.staticMethod=function(){};//静的メソッドを定義します
aShape.staticMethod();
注: 静的プロパティとメソッドはパブリックです。今のところ、静的プロパティとメソッドをプライベートにする方法がわかりません~
メソッド
でこのクラスのパブリック プロパティとプライベート プロパティにアクセスします クラス メソッドで独自のプロパティにアクセスするには、JavaScript にはパブリック プロパティとプライベート プロパティに異なるアクセス メソッドがあります。
関数 Shape(ax,ay)
{
var x=0;
var y=0;
This.gx=0;
This.gy=0;
var init = function()
{
x=ax;//プライベート プロパティにアクセスするには、変数名を直接記述するだけです
y=ay;
This.gx=ax;//パブリック プロパティにアクセスするには、変数名の前に this.
を追加する必要があります This.gy=ay;
};
init();
}
これに関する注意事項
著者の経験によれば、クラス内のこれは必ずしもオブジェクト自体を指すわけではありません。その主な理由は、JavaScript が OOP 言語ではないためです。さらに、関数とクラスは関数で定義されているため、当然何らかの問題が発生します。小さな問題。
このポインターがエラーを指す状況は、通常、オブジェクトのメンバー関数がイベントに応答するようにする必要がありますが、イベントがトリガーされると、システムは受信したメンバー関数を呼び出します。 this ポインターは独自のオブジェクトではなくなりました。もちろん、これをメンバー関数で呼び出すと必ずエラーが発生します。
解決策は、クラス定義の最初にこれをプライベート属性に保存することです。将来、この属性を使用してこれを置き換えることができます。私はこのポインターを使用するためにこの方法を使用しています。これは非常に安全で心配のないものです~
この問題を解決するためにコードを変更しましょう。パート 6 のコードを比較すると、次のことがわかります:
関数 Shape(ax,ay)
{
var _this=this; // これで混乱しないように、これを保存し、将来 _this に置き換えます
var x=0;
var y=0;
_this.gx=0;
_this.gy=0;
var init = function()
{
x=ax;//プライベート プロパティにアクセスするには、変数名を直接記述するだけです
y=ay;
_this.gx=ax;//パブリックプロパティにアクセスするには、変数名の前に this.
を追加する必要があります _this.gy=ay;
};
init();
}
上記では、JavaScript でクラスを定義する方法、クラスのオブジェクトを作成する方法、パブリックおよびプライベートのプロパティとメソッドを作成する方法、静的プロパティとメソッドを作成する方法、コンストラクターをシミュレートする方法について説明し、エラーが発生しやすいことについて説明しました。
JavaScript での OOP 実装については以上です。一般に、JavaScript はクラスの定義に使用され、オブジェクトの作成には上記のコードで十分です。もちろん、mootools またはプロトタイプを使用してクラスを定義し、オブジェクトを作成することもできます。私は mootools フレームワークを使用しましたが、これはより完全な Javascript クラス シミュレーションを備えており、クラスの継承をサポートしているので、興味のある方は試してみてください。もちろん、フレームワークを使用する場合は、関連する js ヘッダー ファイルを 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 言語は、型定義とメソッドの関連付けを通じてオブジェクト指向プログラミングをサポートします。従来の継承はサポートされていませんが、合成を通じて実装されます。インターフェイスは型間の一貫性を提供し、抽象メソッドを定義できるようにします。実際の事例では、顧客操作の作成、取得、更新、削除など、OOP を使用して顧客情報を管理する方法を示します。

PHP における OOP のベスト プラクティスには、命名規則、インターフェイスと抽象クラス、継承とポリモーフィズム、依存関係の注入が含まれます。実際のケースには、ウェアハウス モードを使用してデータを管理する場合や、ストラテジー モードを使用して並べ替えを実装する場合などがあります。

Go 言語は、オブジェクト指向プログラミング、構造体によるオブジェクトの定義、ポインター レシーバーを使用したメソッドの定義、インターフェイスによるポリモーフィズムの実装をサポートしています。オブジェクト指向の機能は、Go 言語でのコードの再利用、保守性、カプセル化を提供しますが、クラスや継承、メソッド シグネチャ キャストといった従来の概念が欠如しているなどの制限もあります。

Golang (Go 言語) には伝統的な意味でのクラスの概念はありませんが、構造体と呼ばれるデータ型が提供され、これによってクラスと同様のオブジェクト指向機能を実現できます。この記事では、構造体を使用してオブジェクト指向機能を実装する方法を説明し、具体的なコード例を示します。構造体の定義と使用法 まず、構造体の定義と使用法を見てみましょう。 Golang では、type キーワードを通じて構造を定義し、必要に応じて使用できます。構造には属性を含めることができます

オブジェクト指向プログラミングとは何ですか?オブジェクト指向プログラミング (OOP) は、現実世界のエンティティをクラスに抽象化し、オブジェクトを使用してこれらのエンティティを表すプログラミング パラダイムです。クラスはオブジェクトのプロパティと動作を定義し、オブジェクトはクラスをインスタンス化します。 OOP の主な利点は、コードの理解、保守、再利用が容易になることです。 OOP の基本概念 OOP の主な概念には、クラス、オブジェクト、プロパティ、メソッドが含まれます。クラスはオブジェクトの設計図であり、オブジェクトのプロパティと動作を定義します。オブジェクトはクラスのインスタンスであり、クラスのすべてのプロパティと動作を備えています。プロパティは、データを保存できるオブジェクトの特性です。メソッドは、オブジェクトのデータを操作できるオブジェクトの関数です。 OOP の利点 OOP の主な利点は次のとおりです。 再利用性: OOP はコードをより高度なものにすることができます。

オブジェクトのステータスの追跡、ブレークポイントの設定、例外の追跡を習得し、xdebug 拡張機能を利用することで、PHP オブジェクト指向プログラミング コードを効果的にデバッグできます。 1. オブジェクトのステータスを追跡する: var_dump() と print_r() を使用して、オブジェクトの属性とメソッドの値を表示します。 2. ブレークポイントの設定: 開発環境にブレークポイントを設定すると、実行がブレークポイントに到達するとデバッガが一時停止するため、オブジェクトのステータスを簡単に確認できます。 3. 例外のトレース: try-catch ブロックと getTraceAsString() を使用して、例外発生時のスタック トレースとメッセージを取得します。 4. デバッガーを使用します。xdebug_var_dump() 関数は、コードの実行中に変数の内容を検査できます。

オブジェクト指向プログラミング (OOP) は、データと動作をオブジェクトにカプセル化して現実世界のエンティティを表すプログラミング パラダイムです。 PHP では、OOP を使用して、現実世界のエンティティを表すクラスとオブジェクトを作成できます。 クラス: オブジェクトのデータ (プロパティ) と操作 (メソッド) を定義します。オブジェクト: クラスのプロパティとメソッドを含み、他のオブジェクトと対話できるクラスのインスタンス。 OOP の実際のケース: ショッピング カートには、次の 2 つのクラスによってモデル化された一連の製品が含まれています。 製品: 名前と価格を持つ単一の製品を表します。カート: ショッピング カートを表します。これには製品リストが含まれており、製品を追加して合計価格を計算するためのメソッドが提供されます。

Go 言語の制御の反転により、オブジェクトの作成と依存関係の注入を分離することで、オブジェクト指向プログラミングに柔軟性が提供されます。IoC の基本原則: 外部のコンテナーまたはフレームワークがオブジェクトの作成と注入を管理し、オブジェクトが他のオブジェクトを直接インスタンス化することはなくなります。依存関係の注入: 依存関係はパラメーターとしてオブジェクトに渡されるため、オブジェクトがその依存関係から独立し、テストと再利用が容易になります。 IoC コンテナ: オブジェクトの作成と挿入の管理に使用されます。Go 言語には、wire や go-wire など、選択できる既製のコンテナが多数あります。利点: テスト容易性の強化、保守性の向上、柔軟性の提供、オブジェクト間の依存関係の疎結合。
