1. 程式人生 > >JavaScript中閉包實現的私有屬性的getter()和setter()方法

JavaScript中閉包實現的私有屬性的getter()和setter()方法

參數 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()方法