ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptのオブジェクト、パブリックメンバー、プライベートメンバーなどの基本概念の例のまとめ

JavaScriptのオブジェクト、パブリックメンバー、プライベートメンバーなどの基本概念の例のまとめ

伊谢尔伦
伊谢尔伦オリジナル
2017-07-27 11:00:062093ブラウズ

JavaScript はオブジェクトに基づいて構築されます。配列はオブジェクト、関数はオブジェクト、そしてもちろんオブジェクトはオブジェクトです。では、オブジェクトとは何でしょうか?オブジェクトは、名前と値のペアのコレクションです。名前は文字列ですが、値は文字列、数値、ブール値、またはオブジェクト (配列や関数を含む) にすることができます。オブジェクトは通常、値を迅速に取得できるようにハッシュ テーブルを使用して実装されます。

値が関数の場合、それを「メソッド」として扱うことができます。オブジェクトのメソッドが実行されると、変数 this がオブジェクト自体に設定されます。このようにして、メソッドは this 変数を通じてオブジェクトのインスタンスにアクセスできます。

オブジェクトは「コンストラクター」を通じて作成できます。コンストラクターは、初期化されたオブジェクトを保持する関数です。コンストラクターは、静的変数やメソッドなど、他の言語の「クラス」によって提供されるものと同様の機能を提供します。

Public

オブジェクトのすべてのメンバーはパブリック メンバーです。どの関数でもこれらのメンバーにアクセス、変更、削除でき、もちろん新しいメンバーを追加することもできます。オブジェクトにメンバーを追加するには、主に 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' を返します。

Private

プライベート メンバーはコンストラクターによって作成されます。通常、コンストラクター内で 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 変数が誤った値に設定されるバグがあるため、これは単なる一時しのぎの措置です。

Privilege

特権メソッドは、コンストラクター内でこれを通じて作成されます。

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(...) {...};
Privilege
function Constructor(...) {
  this.membername = function (...) {...};
}
の短縮形です。

以上がJavaScriptのオブジェクト、パブリックメンバー、プライベートメンバーなどの基本概念の例のまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。