JavaScript中閉包實現的私有屬性的getter()和setter()方法
阿新 • • 發佈:2017-05-27
參數 strong prop nbsp body 利用 edi 獲取 展示
註意:
以下的輸出都在瀏覽器的控制臺中
<!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);else value = 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>
JavaScript中閉包實現的私有屬性的getter()和setter()方法