ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript はクロージャを使用してオブジェクトのプライベート プロパティをシミュレートします_JavaScript のヒント

JavaScript はクロージャを使用してオブジェクトのプライベート プロパティをシミュレートします_JavaScript のヒント

WBOY
WBOYオリジナル
2016-05-16 17:57:511196ブラウズ

JavaScript にはブロックレベルのスコープがなく、プライベート修飾子もありませんが、関数スコープはあります。スコープの利点は、内部関数が外部関数のパラメーターと変数にアクセスできることです (this と argument を除く。内部関数の this はグローバル オブジェクトを指し、argument は内部関数の関数パラメーターを指します)。このプロパティを使用して、オブジェクト指向でプライベート プロパティをシミュレートできます。

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

var myObject=function(value ){
var value=value || 0;
return{
increment:function(num){
value =typeof num==='number' : 0; ,
setValue:function(num){
value = typeof num==='number' ? num : 値;
getValue:function(){
戻り値; 🎜>}
}
}(10)
//alert(myObject.getValue()) //10
myObject.setValue(20); getValue() ); //20
myObject.increment(5);
alert(myObject.getValue()); //25


上の例のように、無名関数オブジェクトの実行後に返されます。匿名関数の変数値は、匿名関数の外部からはアクセスできませんが、匿名関数の内部の関数からはアクセスできます。変数値は返された myObject オブジェクトによって引き続きアクセスされます。記憶は破壊されません。このとき、内部変数の値は myObject オブジェクトのプライベート変数と同様です。



コードをコピー
コードは次のとおりです。 var myObject=function(value){ var name='MyObject';
return{
increment:function(num){
value =typeof num==='number' : 0; setValue:function (num){
value = typeof num==='number' ? num : value;
},
getValue:function(){
//alert(this); 🎜>戻り値;
}、
getName:function(){
戻り値;
}、
setName:function(nameStr){
name=nameStr; },
toString:function(){
return '[オブジェクト:' name ']'
}
}
}
var obj=myObject(5); >obj.increment(6); // 11
//alert(obj);一時オブジェクト 01 ');
alert(obj) //[オブジェクト:一時オブジェクト 01]

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