javaScript 利用閉包模擬對(duì)象的私有屬性
更新時(shí)間:2011年12月29日 00:33:11 作者:
JavaScript缺少塊級(jí)作用域,沒有private修飾符,但它具有函數(shù)作用域。作用域的好處是內(nèi)部函數(shù)可以訪問它們的外部函數(shù)的參數(shù)和變量(除了this和argument
JavaScript缺少塊級(jí)作用域,沒有private修飾符,但它具有函數(shù)作用域。作用域的好處是內(nèi)部函數(shù)可以訪問它們的外部函數(shù)的參數(shù)和變量(除了this和argument。內(nèi)部中的函數(shù)中的this指向全局對(duì)象,argument指向內(nèi)部函數(shù)的函數(shù)參數(shù))。我們可以利用這種屬性來模擬面向?qū)ο笾械乃接袑傩浴?
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ù)外部來說是不可訪問的,但對(duì)于其內(nèi)部的函數(shù),是可以訪問的,匿名函數(shù)執(zhí)行結(jié)束,由于變量value仍被返回的myObject對(duì)象所存取,故value所占據(jù)的內(nèi)存并沒有被銷毀。此時(shí),內(nèi)部的變量value就如同myObject對(duì)象的私有變量一樣。
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]
復(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ù)外部來說是不可訪問的,但對(duì)于其內(nèi)部的函數(shù),是可以訪問的,匿名函數(shù)執(zhí)行結(jié)束,由于變量value仍被返回的myObject對(duì)象所存取,故value所占據(jù)的內(nèi)存并沒有被銷毀。此時(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]
您可能感興趣的文章:
- js類中的公有變量和私有變量
- javascript入門基礎(chǔ)之私有變量
- javascript 動(dòng)態(tài)生成私有變量訪問器
- JavaScript 模擬類機(jī)制及私有變量的方法及思路
- 深入理解JavaScript中的塊級(jí)作用域、私有變量與模塊模式
- JavaScript面向?qū)ο笾接徐o態(tài)變量實(shí)例分析
- js面向?qū)ο笾?、私有、靜態(tài)屬性和方法詳解
- js基礎(chǔ)知識(shí)(公有方法、私有方法、特權(quán)方法)
- Javascript 構(gòu)造函數(shù),公有,私有特權(quán)和靜態(tài)成員定義方法
- JavaScript私有變量實(shí)例詳解
相關(guān)文章
javascript自定義右鍵彈出菜單實(shí)現(xiàn)方法
這篇文章主要介紹了javascript自定義右鍵彈出菜單實(shí)現(xiàn)方法,涉及javascript操作鼠標(biāo)事件及頁面元素的相關(guān)技巧,需要的朋友可以參考下2015-05-05有關(guān)suggest快速刪除后仍然出現(xiàn)下拉列表的bug問題
寫suggest的時(shí)候,有時(shí)我們快速刪除輸入框的文字后,但是suggest下拉列表還有出現(xiàn),導(dǎo)致的原因是因?yàn)閍jax異步請(qǐng)求造成的,下面通過本文給大家分享下解決方法,感興趣的朋友一起看看2016-12-12JavaScript實(shí)現(xiàn)的鏈表數(shù)據(jù)結(jié)構(gòu)實(shí)例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的鏈表數(shù)據(jù)結(jié)構(gòu)實(shí)例,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-04-04超好玩js頁面效果之實(shí)現(xiàn)數(shù)值的動(dòng)態(tài)變化
這篇文章主要給大家介紹了關(guān)于超好玩js頁面效果之實(shí)現(xiàn)數(shù)值的動(dòng)態(tài)變化的相關(guān)資料,文中通過示例代碼及圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-10-10js 方法實(shí)現(xiàn)返回多個(gè)數(shù)據(jù)的代碼
2009-04-04JavaScript程序設(shè)計(jì)之JS調(diào)試
這篇文章主要介紹了JavaScript程序設(shè)計(jì)中的重要環(huán)節(jié):JS調(diào)試,本文通過一個(gè)加法器,介紹JS如何調(diào)試,感興趣的小伙伴們可以參考一下2015-12-12js給對(duì)象動(dòng)態(tài)添加、設(shè)置、刪除屬性名與屬性值實(shí)例代碼
由于項(xiàng)目需要常常會(huì)遇到為某一個(gè)對(duì)象動(dòng)態(tài)添加屬性的情況,下面這篇文章主要給大家介紹了關(guān)于js給對(duì)象動(dòng)態(tài)添加、設(shè)置、刪除屬性名與屬性值的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11