欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javaScript 利用閉包模擬對(duì)象的私有屬性

 更新時(shí)間:2011年12月29日 00:33:11   作者:  
JavaScript缺少塊級(jí)作用域,沒(méi)有private修飾符,但它具有函數(shù)作用域。作用域的好處是內(nèi)部函數(shù)可以訪問(wèn)它們的外部函數(shù)的參數(shù)和變量(除了this和argument
JavaScript缺少塊級(jí)作用域,沒(méi)有private修飾符,但它具有函數(shù)作用域。作用域的好處是內(nèi)部函數(shù)可以訪問(wèn)它們的外部函數(shù)的參數(shù)和變量(除了this和argument。內(nèi)部中的函數(shù)中的this指向全局對(duì)象,argument指向內(nèi)部函數(shù)的函數(shù)參數(shù))。我們可以利用這種屬性來(lái)模擬面向?qū)ο笾械乃接袑傩浴?

復(fù)制代碼 代碼如下:

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

如上例中,myObjeact是匿名函數(shù)執(zhí)行后返回的對(duì)象。匿名函數(shù)中變量value對(duì)于匿名函數(shù)外部來(lái)說(shuō)是不可訪問(wèn)的,但對(duì)于其內(nèi)部的函數(shù),是可以訪問(wèn)的,匿名函數(shù)執(zhí)行結(jié)束,由于變量value仍被返回的myObject對(duì)象所存取,故value所占據(jù)的內(nèi)存并沒(méi)有被銷(xiāo)毀。此時(shí),內(nèi)部的變量value就如同myObject對(duì)象的私有變量一樣。
復(fù)制代碼 代碼如下:

var myObject=function(value){
var name='MyObject';
return{
increment:function(num){
value+=typeof num==='number' ? num : 0;
},
setValue:function(num){
value = typeof num==='number' ? num : value;
},
getValue:function(){
//alert(this);
return value;
},
getName:function(){
return name;
},
setName:function(nameStr){
name=nameStr;
},
toString:function(){
return '[Object:'+name+']';
}
}
}
var obj=myObject(5);
obj.increment(6);
//alert(obj.getValue()); // 11
//alert(obj); //[Object:MyObject]
obj.setName('temp object 01');
alert(obj) //[Object:temp object 01]

相關(guān)文章

最新評(píng)論