日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript中闭包实现的私有属性的getter()和setter()方法

發布時間:2024/6/21 javascript 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript中闭包实现的私有属性的getter()和setter()方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

注意:

以下的輸出都在瀏覽器的控制臺中

<!DOCTYPE html> <html> <head><meta charset="utf-8"><title>閉包</title> </head> <body> <script type="text/javascript"> /*** 利用閉包實現* 這個函數給對象o增加了屬性存儲器方法* 方法名稱為get<name>和set<name>。如果提供了一個判斷函數* setter方法就會用它來檢測參數的合法性,然后再存儲它* 如果判定函數返回false,setter方法就會拋出一個異常** 這個函數具有getter和setter函數* 所操作的屬性值并沒有存儲在對象o中* 想反,這個值僅僅是保存在函數中的局部變量中* getter和setter方法同樣是局部函數,因此可以訪問這個局部變量* 也就是說,對兩個存取器方法來設置或或修改這個值*/ 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(){ //返回一個匿名數組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數組中保存的是匿名函數,可通過保存函數的變量后加"()"來執行匿名函數,
                   //獲取匿名函數中的v的值
//輸出:0 1 2 3 4 5 6 7 8 9 由于每次i的值被constfunc函數中的v所存儲,注意是每次循環都是重新調用,因而能存到不同的內存空間//共享閉包測試 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在同一次函數調用中,同一個變量中(內存地址不變),
//所以當循環執行完i的值為10,在console.log()中的調用每次得到的都是同一個地址上的值,也就是10;

?

轉載于:https://www.cnblogs.com/ctsch/p/6910457.html

總結

以上是生活随笔為你收集整理的JavaScript中闭包实现的私有属性的getter()和setter()方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。