ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptのオブジェクト、パブリックメンバー、プライベートメンバーなどの基本概念の例のまとめ
JavaScript はオブジェクトに基づいて構築されます。配列はオブジェクト、関数はオブジェクト、そしてもちろんオブジェクトはオブジェクトです。では、オブジェクトとは何でしょうか?オブジェクトは、名前と値のペアのコレクションです。名前は文字列ですが、値は文字列、数値、ブール値、またはオブジェクト (配列や関数を含む) にすることができます。オブジェクトは通常、値を迅速に取得できるようにハッシュ テーブルを使用して実装されます。
値が関数の場合、それを「メソッド」として扱うことができます。オブジェクトのメソッドが実行されると、変数 this がオブジェクト自体に設定されます。このようにして、メソッドは this 変数を通じてオブジェクトのインスタンスにアクセスできます。
オブジェクトは「コンストラクター」を通じて作成できます。コンストラクターは、初期化されたオブジェクトを保持する関数です。コンストラクターは、静的変数やメソッドなど、他の言語の「クラス」によって提供されるものと同様の機能を提供します。
オブジェクトのすべてのメンバーはパブリック メンバーです。どの関数でもこれらのメンバーにアクセス、変更、削除でき、もちろん新しいメンバーを追加することもできます。オブジェクトにメンバーを追加するには、主に 2 つの方法があります:
このメソッドは通常、オブジェクト インスタンスのパブリック変数を初期化するために使用されます。コンストラクターの this 変数は、オブジェクトにメンバーを追加するために使用されます:
function Container(param) { this.member = param; }
新しいオブジェクトを構築します:
var myContainer = new Container('abc');
次に、パブリック変数 myContainer.member の値は 'abc' になります。
このメソッドは通常、パブリック メソッドを追加するために使用されます。オブジェクト自体でメンバーを検索しても見つからない場合は、コンストラクターのプロトタイプ メンバーが使用されます。このプロトタイプのメカニズムは、オブジェクト指向のいわゆる「継承」を実装し、メモリも節約します。同じコンストラクターから作成されたすべてのオブジェクトにメソッドを追加するには、コンストラクターのプロトタイプに関数を追加するだけです:
Container.prototype.stamp = function (string) { return this.member + string; }
次に、このメソッドを呼び出すことができます:
myContainer.stamp('def')
'abcdef' を返します。
プライベート メンバーはコンストラクターによって作成されます。通常、コンストラクター内で var を使用して宣言された変数と関数パラメーターはプライベート メンバーになります。
function Container(param) { this.member = param; var secret = 3; var self = this; }
このコンストラクターは、param、secret、self の 3 つのプライベート インスタンス変数を作成します。
function Container(param) { function dec() { if (secret > 0) { secret -= 1; return true; } else { return false; } } this.member = param; var secret = 3; var self = this; }
プライベート メソッド dec はインスタンス変数 Secret をチェックし、それが 0 より大きい場合は 1 ずつ減分し、0 より小さい場合は false を返します。これにより、このビルダーで作成したオブジェクトの dec 関数が 3 回までしか使用できないという機能が実現されます。
慣例により、プライベート変数 self を作成します。プライベート メソッドはオブジェクト自体にアクセスできます。ただし、「ECMAScript 言語仕様」には内部関数の this 変数が誤った値に設定されるバグがあるため、これは単なる一時しのぎの措置です。
特権メソッドは、コンストラクター内でこれを通じて作成されます。
function Container(param) { function dec() { if (secret > 0) { secret -= 1; return true; } else { return false; } } this.member = param; var secret = 3; var self = this; this.service = function () { if (dec()) { return self.member; } else { return null; } }; }
service は特権メソッドです。 myContainer.service() への最初の 3 回の呼び出しでは「abc」が返され、その後は null が返されます。サービスは、プライベート メソッド dec を呼び出してプライベート変数 Secret にアクセスします。他のオブジェクトおよびメソッドについては、サービスにアクセスできますが、プライベート メンバーには直接アクセスできません。
このパブリック、プライベート、および特権メンバーのパターンは、JavaScript の固有メカニズムであるクロージャーのために存在します。これは、外部関数が戻った場合でも、内部関数は常にその外部関数の変数とパラメーターにアクセスできることを意味します。これは JavaScript 言語の非常に強力な機能です。現在、JavaScript プログラミングに関する書籍で、その活用方法を示したものはなく、言及すらありません。
プライベート メンバーと特権メンバーはオブジェクトの初期化時にのみ作成できますが、パブリック メンバーはいつでも追加できます。
function Constructor(...) { this.membername = value; } Constructor.prototype.membername = value;
function Constructor(...) { var self = this; var membername = value; function membername(...) {...} }
注: このコード:
function membername(...) {...}
は、実際には次のコード
var membername = function membername(...) {...};
function Constructor(...) { this.membername = function (...) {...}; }の短縮形です。
以上がJavaScriptのオブジェクト、パブリックメンバー、プライベートメンバーなどの基本概念の例のまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。