ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript の静的オブジェクトとコンストラクターの使用、およびパブリックおよびプライベートの問題_JavaScript スキル

JavaScript の静的オブジェクトとコンストラクターの使用、およびパブリックおよびプライベートの問題_JavaScript スキル

WBOY
リリース: 2016-05-16 18:33:39
オリジナル
1184 人が閲覧しました

まず見てください:

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

var objJson={
op1: 'objJson option1',
fn1:function(){
alert(this.op1)
}
}

この形式の宣言ではobjJson.op1 または objJson.fn1() を通じて内部プロパティに直接アクセスしても問題ありません。ただし、この場合:
コードをコピー コードは次のとおりです:

var objFn =function(){
this.op1='objFn.op1';
this.op2=function(){
アラート(this.op1)
}

その後、objFn.op1 または objFn.op2() を使用して内部プロパティに直接アクセスしても、現時点ではオブジェクトではないため、機能しません。
それで、彼をインスタンス化する必要があります

コードをコピーします コードは次のとおりです:
var inst =new objFn();
alert(inst.op1);


このようにして、必要な値を取得できます。
JSON 形式でオブジェクトをコピーする場合、非常に簡単ですが問題があります:


var newone=objJson;
newone.op1='changed';


オリジナルが見つかります。オブジェクト内の op1 の値も変更されています。ただし、オブジェクト宣言の 2 番目の方法が使用される場合、変更はインスタンス内でのみ行われ、他のインスタンスには影響しません。
したがって、JSON のような静的オブジェクトは、一般的に使用されるライブラリを作成するときに使用するのに適しています。これらのオブジェクトには独自の名前空間があるため、誰も他のものに干渉せず、使いやすいです。
コンストラクターの "public" 属性と "private" 属性
上記のコンストラクターに変更を加えます:



コードをコピー コードは次のとおりです。 var objFn=function(){
var pri1='プライベート変数';
this.op1='パブリック変数'; 🎜>this.op2 =function(){
アラート(pri1 ',' this.op1)
};
var o=new objFn(); typeof o.pri1 ' ,' typeof o.op1);//未定義、文字列
o.op2();//プライベート変数、パブリック変数


プライベート変数は許可されませんオブジェクト外でアクセスされた場合、すべて typeof 以降は未定義です。プライベート メソッドへのアクセスを見てみましょう:



コードをコピー

コードは次のとおりです: var objFn= function(){ var pri1='プライベート変数'; var pri2=function(){ this.op2();
; ='パブリック変数' ;
this.op2=function(){
アラート(pri1 ',' this.op1)
this.acPri=function(){
pri2.call(this );
};
var o=new objFn(); //プライベート変数、パブリック変数


注: JavaScript のクロージャー機能のため、パブリック メソッド acPri() を介してプライベート メソッド pri2 を呼び出すときは、call を使用してプログラムのコンテキストを渡す必要があります。ただし、これは非常に混乱しそうです。




コードをコピー


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


var objFn=function(){
var my =this; var pri1='プライベート変数'; var pri2=function(){ my.op2(); this.op1='パブリック変数'; this.op2=function(){ アラート(pri1 ',' this.op1);
this.acPri=function (){
pri2.();
};
var o=new objFn();// プライベート変数、パブリック変数


もちろん、最終結果は依然として一定です。
転載の際は以下の点をお守りください
著者:Beiyu (tw:@rehawk)
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート