當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JavaScript中闭包实现的私有属性的getter()和setter()方法
生活随笔
收集整理的這篇文章主要介紹了
JavaScript中闭包实现的私有属性的getter()和setter()方法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
注意:
以下的輸出都在瀏覽器的控制臺中
<!DOCTYPE html> <html> <head><meta charset="utf-8"><title>閉包</title> </head> <body> <script type="text/javascript"> /*** 利用閉包實現(xiàn)* 這個函數(shù)給對象o增加了屬性存儲器方法* 方法名稱為get<name>和set<name>。如果提供了一個判斷函數(shù)* setter方法就會用它來檢測參數(shù)的合法性,然后再存儲它* 如果判定函數(shù)返回false,setter方法就會拋出一個異常** 這個函數(shù)具有getter和setter函數(shù)* 所操作的屬性值并沒有存儲在對象o中* 想反,這個值僅僅是保存在函數(shù)中的局部變量中* getter和setter方法同樣是局部函數(shù),因此可以訪問這個局部變量* 也就是說,對兩個存取器方法來設置或或修改這個值*/ function addPrivateProperty(o,name,predicate) {var value;//這是一個屬性值//getter方法簡單地將其返回o['get'+name] = function(){return value;};//setter方法首先檢查值示范合法,若不合法就會拋出異常//否則就將其存儲起來o['set'+name] = function(v){if(predicate && !predicate(v))throw Error('set'+name+": invalid value "+v);elsevalue = v;}; }//想的代碼展示addPrivateProperty()方法 var o = {};//設置一個空對象//增加屬性存儲器方法getName()和setName() //確保只語序字符串值 addPrivateProperty(o,"Name",function(x){return typeof x==="string";}); o.setName("Frank"); //設置屬性值 console.log(o.getName()); //獲取屬性值 try{o.setName(0); //設置一個非字符值,會拋出一個錯誤 (由throw語句拋出) }catch(e){console.log("屬性值設置出錯"); //上面拋出的錯誤在這里的到處理 }</script> </body> </html> //第二部分代碼://非共享閉包測試 function constfunc(v){return function(){ //返回一個匿名數(shù)組return v; //返回才外部變量 v, }; }var funcs = []; for(var i=0; i<10;i++)funcs[i] = constfunc(i); for(i=0;i<funcs.length;i++)console.log(funcs[i]()); //在funcs數(shù)組中保存的是匿名函數(shù),可通過保存函數(shù)的變量后加"()"來執(zhí)行匿名函數(shù),//獲取匿名函數(shù)中的v的值 //輸出:0 1 2 3 4 5 6 7 8 9 由于每次i的值被constfunc函數(shù)中的v所存儲,注意是每次循環(huán)都是重新調(diào)用,因而能存到不同的內(nèi)存空間//共享閉包測試 function constfunc2(){var funcs = [];for(var i=0; i<10;i++)funcs[i] = function(){ return i;};return funcs; } var funcs = constfunc2();console.log(funcs[0]()); console.log(funcs[3]()); console.log(funcs[7]()); console.log(funcs[9]()); //輸出: 10 10 10 10
//原因:
//由于這個i在同一次函數(shù)調(diào)用中,同一個變量中(內(nèi)存地址不變),
//所以當循環(huán)執(zhí)行完i的值為10,在console.log()中的調(diào)用每次得到的都是同一個地址上的值,也就是10;
?
轉載于:https://www.cnblogs.com/ctsch/p/6910457.html
總結
以上是生活随笔為你收集整理的JavaScript中闭包实现的私有属性的getter()和setter()方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图解集合8:红黑树的移除节点操作
- 下一篇: .net core 集成 autofac