まず見てください:
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 pri1='プライベート変数';
this.op1='パブリック変数'; 🎜>this.op2 =function(){
アラート(pri1 ',' this.op1)
};
var o=new objFn(); typeof o.pri1 ' ,' typeof o.op1);//未定義、文字列
o.op2();//プライベート変数、パブリック変数
プライベート変数は許可されませんオブジェクト外でアクセスされた場合、すべて typeof 以降は未定義です。プライベート メソッドへのアクセスを見てみましょう:
コードをコピー
; ='パブリック変数' ;
this.op2=function(){
アラート(pri1 ',' this.op1)
this.acPri=function(){
pri2.call(this );
};
var o=new objFn(); //プライベート変数、パブリック変数
注: JavaScript のクロージャー機能のため、パブリック メソッド acPri() を介してプライベート メソッド pri2 を呼び出すときは、call を使用してプログラムのコンテキストを渡す必要があります。ただし、これは非常に混乱しそうです。
コードをコピー
コードは次のとおりです:
var objFn=function(){
this.acPri=function (){
pri2.();
};
var o=new objFn();// プライベート変数、パブリック変数
もちろん、最終結果は依然として一定です。
転載の際は以下の点をお守りください
著者:Beiyu (tw:@rehawk)