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()方法相关推荐
- JavaScript中四种不同的属性检测方式比较
JavaScript中四种不同的属性检测方式比较 1. 用in方法 var o = {x:1}; "x" in o; //true "y" in o; //fa ...
- Java (1)写一个类,名为Animal, 该类有两个私有属性,name(代表动物的名字),和legs(代表动物的腿的条数);要求为两个私有属性提供public的访问方法。并提供两个重载的构造方法,
Java (1)写一个类,名为Animal, 该类有两个私有属性,name(代表动物的名字),和legs(代表动物的腿的条数);要求为两个私有属性提供public的访问方法.并提供两个重载的构造方法, ...
- Vue中computed 计算机属性、getter、setter
计算属性 在模板表达式中放入太多逻辑时,会让模板重且难以维护.比如: // 错误示例 <div id="example">{{ message.split('').re ...
- java实体类没有映射文件_MyBatis自动生成实体类、DAO和XML映射文件,并去掉实体类中的getter和setter方法...
今天花了3个多小时搞定了这个事情,写个Blog记录一下,先看一下最终生成的实体类吧. packagecom.mybatis.pojo;importlombok.AllArgsConstructor;i ...
- java中getter 和 setter 方法有什么意义?为什么不用public代替GS?
知乎里的一个答案:https://www.zhihu.com/question/21401198 的确可以暴露,如果1. 所有内外代码都是你自己写:2. 这个模块再也不改了:3. 不会继承它,或者继承 ...
- Javascript中闭包的作用域链
作用域定义了在当前上下文中能够被访问到的成员,在Javascript中分为全局作用域和函数作用域,通过函数嵌套可以实现嵌套作用域. 闭包一般发生在嵌套作用域中.闭包是JavaScript最强大的特性之 ...
- [转]在Javascript中闭包(Closure)
转载自: http://baike.baidu.com/view/648413.htm 一.什么是闭包? "官方"的解释是:所谓"闭包",指的是一个拥有许多变量 ...
- 浅谈JavaScript中闭包
引言 闭包可以说是JavaScript中最有特色的一个地方,很好的理解闭包是更深层次的学习JavaScript的基础.这篇文章我们就来简单的谈下JavaScript下的闭包. 闭包是什么? 闭包是什么 ...
- 在Javascript中闭包(Closure)
一.什么是闭包? "官方"的解释是:所谓"闭包",指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 相 ...
最新文章
- MSC Apex 2020中文版
- 俄亥俄州立大学计算机专业排名,美国俄亥俄州立大学各专业的排名情况介绍
- LeetCode每日打卡 - 4的幂
- 5G手机江湖:一场卡位战,一位“关键先生”,一个“王者”
- field list什么意思_什么是生物信息学?
- java过载保护_微服务过载保护原理与实战
- 【CocoStudio游戏开发之一】制作多分辨率UI布局
- python 抓取豆瓣一拍一所有妹子客片
- 二叉排序树和二叉平衡树
- 神经网络学习的几种方法
- gabor滤波 matlab,图像处理 – 使用matlab应用Gabor方程创建Gabor滤波器
- 串口数据visual c++ MSComm 串口控件程序开发
- 主数据治理项目实施中存在的问题
- @Valid 注解详解 Java Bean Validation的前世今生
- 基础矩阵和极点、极线关系
- Orc-Battle
- 0160 十分钟看懂时序数据库(I)-存储
- 什么是jason?jason应该如何使用和解读?jason的语法格式
- se 2.4 path 小记。
- ehviewer_ehviewer