ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript のパブリック、プライベート、特権モード_JavaScript のヒント

JavaScript のパブリック、プライベート、特権モード_JavaScript のヒント

WBOY
WBOYオリジナル
2016-05-16 18:37:541413ブラウズ
概要
プライベート変数は、「var」キーワードを使用してオブジェクト内で宣言され、プライベート関数と特権メソッドによってのみアクセスできます。
プライベート関数は、オブジェクトのコンストラクターで宣言されます (または、var functionName=function(){...} を通じて定義されます)。これらは、特権関数 (オブジェクトのコンストラクターを含む) およびプライベート関数によって呼び出すことができます。
特権メソッドは this.methodName=function(){...} によって宣言され、オブジェクトの外部のコードによって呼び出すことができます。 this.privileged function() メソッドを使用して特権関数を呼び出すことができ、また、private function() メソッドを使用してプライベート関数を呼び出すことができます。
パブリック プロパティは this.variableName を通じて定義され、オブジェクトの外部で読み取りおよび書き込みが可能です。プライベート関数から呼び出すことはできません。
パブリック メソッドは ClassName.prototype.methodName=function(){...} によって定義され、オブジェクトの外部から呼び出すことができます。
プロトタイプのプロパティは、ClassName.prototype.propertyName=someValue で定義されます。
静的プロパティは ClassName.propertyName=someValue で定義されます。
この書き方にも注意してください: var 関数名 = function 関数名 () {...} この関数は、呼び出し時に特権関数とプライベート関数の性質を持ちます。
例:
コードをコピー コードは次のとおりです。





コードをコピー


コードは次のとおりです。


functin Container(param) ) {
this.member = param;
}
functin Container(param) {
this.member = param;
}


コードをコピー


コードは次のとおりです:

Container.prototype.stamp = function (string) {
return this.member string;
}
Container.prototype.stamp = function (string) {
return this.member string;
} member string;
}


このようにして、メソッド myContainer.stamp('def') を呼び出すことができ、結果は 'abcdef' になります。
Private
プライベート メンバーはコンストラクターによって生成されます。通常の var 変数とコンストラクター パラメーターはプライベート メンバーと呼ばれます。
Java コード コードは次のとおりです。


function Container(param) ) {
this.member = param;
var that = this;
}
function Container(param) {
this.member = param; 🎜>var secret = 3;
var that = this;
}

コンストラクターは、param、secret、that の 3 つのプライベート インスタンス変数を作成します。これらはオブジェクトに追加されますが、外部からアクセスしたり、オブジェクト自体の
パブリック メソッドからアクセスしたりすることはできません。これらにはプライベート メソッドでのみアクセスできます。プライベート メソッドはコンストラクターの内部メソッドです。
Java コード

コードをコピー コードは次のとおりです。
function Container(param) ) {
関数 dec() {
if (秘密 > 0) {
秘密 -= 1;
戻り値
} else {
戻り値

}
this.member = param;
var that = this;
function Container(param) {
function dec() {
if (secret > 0) {
secret -= 1;
return true;
} else {
return
}
this .member = param;
var secret = 3;
var that = this;


プライベート メソッド dec はシークレット インスタンス変数をチェックします。 0 より大きい場合はシークレットをデクリメントして true を返し、それ以外の場合は false を返します。このオブジェクトの使用を 3 回までに制限するために使用できます。
いつものように、プライベート変数を定義します。これは、このオブジェクトをプライベート メソッドで使用できるようにするために使用されます。これは、ECMAScript 言語仕様にバグがあるために行われます。
このバグにより、this を内部メソッドに正しく設定できなくなります。
パブリック メソッドからプライベート メソッドを呼び出すことはできません。プライベート メソッドを便利にするには、特権メソッドを導入する必要があります。
特権
特権メソッドはプライベート変数とメソッドにアクセスでき、それ自体はパブリック メソッドや外部世界からアクセスできます。特権メソッドは削除または置き換えることができますが、
変更したり、その秘密を強制的に公開したりすることはできません。
特権メソッドは、コンストラクターでこれを使用して割り当てられます。
Java コード




コードをコピー
コードは次のとおりです。 function Container(param) ) { 関数 dec() { if (秘密 > 0) {
秘密 -= 1;
戻り値
} else {
戻り値

}
this.member = param;
var that = this;
if (dec()) {
return that.member;
} else {
return null;
}
}
function Container(param) {
function dec(); {
if (secret > 0) {
secret -= 1;
return true;
} else {
return
}
this .member = param;
var Secret = 3;
var that = this;
if (dec()) {
return that.member;
} else {
return null;
}
};


サービスは特権メソッドです。 myContainer.service() への最初の 3 回の呼び出しでは、「abc」が返されます。それ以降はnullを返します。サービスはプライベート dec メソッドを呼び出し、
dec メソッドはプライベート シークレット変数にアクセスします。サービスは他のオブジェクトやメソッドから見えますが、プライベート変数に直接アクセスすることはできません。
クロージャ
JavaScript にはクロージャがあるため、パブリック、プライベート、特権メンバーのパターンが可能です。これは、外部メソッドが戻った後でも、内部メソッドは常にその外部メソッドの
var 変数とパラメーターにアクセスできることを意味します。これは JavaScript 言語の非常に強力な機能です。現在、この機能の活用方法を示した JavaScript
プログラミングの書籍はなく、ほとんどの書籍では言及さえありません。
プライベートメンバーと特権メンバーは、オブジェクトの構築時にのみ生成できます。公開メンバーはいつでも追加できます。
モード
パブリック
Java コード




コードをコピー


コードは次のとおりです:


function Constructor(...) {
this.membername = 値;
Constructor.prototype.membername = value; function Constructor(...) { this.membername = 値; Constructor.prototype.membername = 値;
プライベート
Java コード
コードをコピー コードは次のとおりです:

function Constructor( ...) {
var that = this;
var membername = value;
function membername(...) {...}
}
// 注: function ステートメント
// function membername(...) {...}
// は次のコードの省略形です
// var membername = function membername(...) {... };
関数コンストラクター(...) {
var that = this;
関数メンバー名 (...) {...}
}
// 注: 関数ステートメント
// function membername(...) {...}
// は次のコードの省略形です
// var membername = function membername(... ) {...};

特権
Java コード

function Constructor(...) {
this.membername = function (...) {...};
}
function Constructor( ...) {
this. membername = function (...) {...};
}

翻訳者注: 特権メソッドは単純に次のようにみなせると思います。コンストラクター内のパブリック メソッド。特権メソッドは外部およびパブリック メソッド
からアクセスでき、それ自体がプライベート変数にアクセスできるためです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。