注意:
以下的输出都在浏览器的控制台中
<!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>
时间: 2024-10-18 07:45:20