JavaScript之EcmaScript5中geter和setter

【ECMAScript标准】深入解析ES5:现代JavaScript的基石 ECMAScript 5(ES5)是JavaScript语言的一个重要版本,于2009年正式发布。尽管JavaScript在不断发展,ES5依然是现代JavaScript的基础,广泛应用于各种Web开发项目中。本文将详细介绍ES5的关键特性、与之前版本的区别,以及对开发者的影响,帮助你更好地理解和应用这一标准。1. 什么是ECMAScript?ECMAScript是由ECMA国际组织发布的一种脚本语言标准,JavaScript是其最著名的实现。 阅读详情

我在搞懂JavaScript的getter和setter之前,通过百度搜索在网上看了很多别人写的文章,个人的内心是表示很气愤的,因为大家都是一知半解,很多博主都并没有真正的理解这个语法的用处。虽然getter和setter的意思是这样,但是它的意义并不是局限于此。

先说下网上大部分人的理解:

   function  Person(){
      var  _personName="anonymous";

      //传统意义的getter
      this.getName=function(){
        return _personName;
      }

      //传统意义的setter 
      this.setName=function(name){
          _personName=name;
        
      }
   }


  var  person=new Person();

  person.getName();

  person.setName();

根据闭包的特性,外部是无法访问到_personName的。我们要进行_personName的相应操作,只能通过getName和setName进行,由于我们可以在setName中定义拦截器,假如传入的数据不满足要求,我们可以不需要改变_personName的值。

这个getter和setter的用法必须通过函数的形式调用,而我们是没法直接person.setName='张三李四王麻子';这样的操作的。一定程度上使用时比较麻烦的,而且使用具有一定的局限性。

ECMAScript5中引入了get和set关键字。可以算得上是传统意义的gettersetter的语法糖,这样我们给函数赋值或者使用函数取值 的时候就像使用属性一样,提高了便利性。

其有两种使用方法。

方法1:

var obj={
      _val:false
    };

    Object.defineProperty(obj,"val",{
      get:function(){
        return this._val;
      },set:function(val){

      if (typeof val!=="number") {
        return;
      }

      this._val=val;
    }});

其中Object.defineProperty的用法请大家自行百度,它具有很多语法特性,对于编写健壮的JavaScript程序有一定的意义。

其中,需要注意的是,get函数返回的是_val而不是val,set函数修改的是_val而不是val。如果熟悉C#语法的朋友一定就恍然大悟了,这就是C#里面类的字段嘛,我个人是这样认为的。

有了get和set关键字,我们可以直接进行这样的操作obj.val='Hello world'; console.log(obj.val);这样的好处是可以不用通过函数调用的形式使用,具有很强的灵活性。

于是当我们为obj.val赋值以后,我们可以在里面定义某些观察器,然后通知代码做事情,这就是大名鼎鼎的Vuejs内部实现双向数据绑定的原理,而相比Angularjs1.x的脏值检测,大大的提高了效率(尤其是对于树形结构的对象,Angularjs检测起来相当的消耗资源)。

还有一种写法:

  var objTest={
      name:"yanxgu",
      get Name(){
        return this.name;
      },
      set Name(name){
        this.name=name;
      }
    }
在搞懂了getter和setter之后,我们便可以定义自己的数据观察器对象了。

写到这儿还没有完,另一个问题引发了我的思考,因为大家可以看出_val是定义在obj上的,也就是说它是直接对外暴露的,外界可以不用通过取值器和赋值器直接拿到这个值这样显然不好,可是解决方案由于鄙人水平有限,尚待研究,各位大大不喜勿喷,谢谢。


JAVA经典继承与父类调用 geter、seter访问器 构造器 代码中设计了各个类的基类,设置私有成员变量,利用构造器对成员变量初始化,用geter、seter访问器设置、获取成员变量的值。继承基类并创建对象,在子类中调用父类方法。 立即下载

相关推荐

IQA图像质量评价 数据集介绍(LIVE、TID2013、CSIQ、LIVEC、KonIQ-10K)

LIVE、TID2013、CSIQ、LIVEC、KonIQ-10K 数据集介绍

qq_37925923的博客 1万+

ECMAScript 5 - JavaScript 5

ECMAScript 5 - JavaScript 5 1. ECMAScript 5 是什么 ECMAScript 5 也被称为 ES5 和 ECMAScript 2009。 本章介绍 ES5 的一些最重要的特性。 2. ECMAScript 5 的新特性 “use strict” 指令 String.prototype.trim() Array.isArray() Array.prototype.forEach() Array.prototype.map() Array.prototype.filte

吴钦飞 1015

VINS-Mono 时延估计论文翻译

Online Temporal Calibration for Monocular Visual-Inertial Systems 摘要 精确的状态估计是机器人导航、自主驾驶、虚拟现实和增强现实等各种智能应用的基础模块。视觉惯性融合是近年来流行的六自由度状态估计技术。记录不同传感器测量值的时刻对系统的鲁棒性和准确性至关重要。在实践中,每个传感器的时间戳通常会受到触发和传输延迟的影响,从而导致不同传感器之间的时间偏差(时间偏移)。这种时间偏移严重影响传感器融合的性能。为此,我们提出了一种标定视觉和

weixin_39061796的博客 1255

ECMAScript5

1.ECMA是是一种由ECMA组织(前身为欧洲计算机制造商协会)制定和发布的脚本语言规范 2.而我们学的js是ECMA的实现,但属于ECMAscript和javascript平时表达一个意思 3.js包含三个部分 1)ECMAScript(核心) 2)扩展=》浏览器 DOM(文档对象模型) BOM(浏览器对象模型) 3)扩展=》服务器 Node 4.es几个版本 es5:09年发布 es6(es2...

qq_40052011的博客 648

RAG——从0到1快速搭建RAG应用

本文介绍了基于LangChain框架构建RAG(检索增强生成)应用的技术方案,涵盖核心模块选型与实现流程。技术栈包括:LangChain应用框架、pypdf文档解析、RecursiveCharacterTextSplitter文本分块、bge-small-zh-v1.5向量模型、Faiss向量库和通义千问大模型。文章详细说明了开发环境配置步骤,包括虚拟环境创建、依赖库安装和模型下载。核心代码分为索引、检索、生成三大流程,索引流程完成PDF文档解析、分块和向量化存储;检索流程实现查询向量化和相似度匹配;生成流

小志的博客 595

GB 44497-2024《智能网联汽车 自动驾驶数据记录系统》标准解读

GB 44497-2024《智能网联汽车 自动驾驶数据记录系统》针对智能网联汽车的自动驾驶数据记录系统进行了全面规范。标准要求我们记录车辆在自动驾驶模式下的所有关键操作数据,如:1. 车辆状态数据,如速度、加速度、转向角度、制动状态等;2. 环境感知数据,如周围物体的位置、速度、类型等;3. 驾驶决策数据,如路径规划、避障决策、紧急制动指令等;4. 系统状态数据,如软件版本、硬件状态、系统警告信息等。在数据存储方面,标准强调了数据的安全性和可靠性。

daopuyun的博客 2672

如何用mapGetter,以及vuex常量

一、参考 参考大佬闲人王昱珩  白云随风飘   https://blog.youkuaiyun.com/baidu_36681154/article/details/79205173   二、实现功能如下: 用户进入登录页面  选择用户登录或者游客模式登录    进入首页 首页中是否为游客,首页显示不同的信息   如果是游客模式       如果是用户登录 三、实现代码 1、状态机vuex...

weixin_42429288的1博客 6408

手把手教你学Simulink——基于Simulink的隔离型DC-DC全桥变换器移相控制建模示例

本文详细介绍了基于Simulink的全桥移相变换器(PSFB)建模与控制方法。首先分析了全桥移相拓扑在大功率应用中的优势,包括ZVS实现、高频化和小型化特点。随后给出了具体设计参数和移相控制策略,采用电压外环+移相角内环的双闭环控制架构。文章重点演示了Simulink建模步骤,包括主电路搭建、移相PWM生成和PI控制器设计,并通过满载稳态、负载阶跃和轻载测试三种场景验证了系统性能。最后总结了工程实践要点,提出自适应控制等扩展方向,强调移相控制通过精准时间管理实现高效能量转换的核心价值。

MHD0815的博客 261

ECMAScript5(ES5)

加载事件、严格模式、JSON对象方法、获取元素节点、Function方法bind、class列表属性、data自定义属性

katsuki_chan的博客 1364

具身智能(40):主流 VLA 模型π₀

摘要: π₀是首款专为机器人设计的VLA(视觉-语言-动作)端到端基础模型,通过双阶段训练实现“感知-决策-执行”闭环。其创新点包括:1)FlowMatching技术实现连续平滑动作控制(精度0.3°);2)结合VLM预训练与多机器人实操数据,零样本任务完成率达76.4%,远超同类模型;3)支持模糊指令理解与动态场景适应(如遮挡识别)。开源版本涵盖不同规模模型,适用于工业装配、服务机器人等场景,在延迟(213ms)和稳定性(92%自主恢复率)上显著领先OpenVLA等竞品。

码农17年的博客 512

基于 Qt 的轻量化工业组态软件设计与实现

本文设计并实现了一种基于Qt框架的轻量化工业组态软件,解决了传统组态软件体积庞大、部署复杂等问题。该软件采用模块化架构,集成可视化图形编辑、设备数据采集、脚本扩展等核心功能,具有跨平台运行、资源占用低、启动速度快等特点。通过关键技术优化,实现了高效稳定的数据采集、脚本控制和网络通信,可广泛应用于工业机器人HMI、小型PLC监控等轻量化场景。测试结果表明,该软件体积约30MB,运行内存占用60-80MB,启动时间1.2秒,满足工业轻量化监控需求。未来可扩展更多工业组件和协议支持,进一步提升应用价值。

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 142

【ECMAScript标准规范】

ECMAScript 是一种定义脚本语言核心功能的标准,最常见的实现就是。随着 ECMAScript 标准的不断发展,JavaScript 也引入了许多新的特性,极大提高了开发效率和代码可读性。

Dreams°的博客 1163

20、认知负荷理论在教育技术中的应用

本文深入探讨了认知负荷理论(Cognitive Load Theory, CLT)在教育技术中的应用,重点分析了如何通过优化教学设计减少学习者的认知负荷,提高学习效率。文章介绍了认知负荷的三种类型:内在认知负荷、外在认知负荷和germane认知负荷,并结合多媒体学习原则(如模态效应、空间连续性原则、时间连续性原则等)提出了减少外在认知负荷的具体策略。此外,文章通过实证研究和教学案例,展示了认知负荷理论在不同学科和个性化教学中的广泛应用和有效性。最终,文章总结了应用认知负荷理论进行教学设计的具体流程,强调其在

solidity8miner的博客 924

ECMAScript 5 是什么?

ECMAScript 5 也称为 ES5 和 ECMAScript 2009。本章介绍 ES5 的一些最重要的特性。

m0_64883407的博客 522

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

vuex 辅助函数mapGetters基本用法

vuex 辅助函数mapGetters基本用法

weixin_48927323的博客 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

JavaScript 属性的 getter 和 setter

,console.error('名字必须是字符串');return;});obj.name = "张三";在上述示例中,为对象obj的name属性定义了getter和setter。getter用于获取属性值,setter用于设置属性值,并进行了类型检查。也可以通过obj._name直接访问name。注意一个众所周知的约定:以下划线 “_” 开头的属性是内部属性,不应该从对象外部进行访问。

咸鱼滚滚 801

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ECMAscript5-新特性

ECMAscript5特性: 这些是2009年发布的新特性: “use strict”指令 1.String.trim() 2.Array.isArray() 3.Array.forEach() 4.Array.map() 5.Array.filter(); 6.Array.reduce(); 7.Array.reduceRight() 8.Array.every(); 9.Array.some(); 10.Array.indexOf(); 11.Array.lastIndexOf() 12.JSON.pa

qq_42526440的博客 372

第23章 ECMAScript 5

第23章 ECMAScript 5 ECMAScript 5.1(或ECMAScript 5)是ECMAScript标准最新修正。与HTML5规范进程本质类似,ECMAScript 5通过对现有JavaScript方法添加语句和原生ECMAScript对象做合并实现标准化。ECMAScript 5还引入了一个语法的严格变种,被称为严格模式(strict mode)。本章将介绍ECMAScript 5有用的改变和新特性。 ECMAScript 5完整列表可以参考:官方ECMAScript语言规范附录D和E

唯美清泠 475

ECMAScript5——严格模式

位置放在脚本文件的第一行,整个脚本都将以严格模式运行。放在函数体的第一行,则整个函数以严格模式运行。 ES5 引入严格模式,在代码头部加上 “use strict” 即可开启严格模式。严格模式主要有以下限制。变量必须先声明后使用函数的参数不能有同名属性,否则会报错不能使用 with 语句不能对只读属性赋值,否则会报错不能使用前缀 0 表示八进制数,否则会报错不能删除不可删除的属性,否则报错不可删除...

Mr.ShyZhang趟过的前端“小路坑” 695

ECMAScript5特性介绍之数组篇

Es5的特性以及发布很长时间了,增加了很多实用的特性(Array的 indexOf、every,some,forEach等,Object的create,keys,isFrozen等),这些特性已经得到个浏览器的支持,比如:IE9+,FF21+,chrome23+,opera 15+,SF6+都已经基本支持全部特性。详细的特性检测见:http://kangax.github.io/compat-tab

非著名coder的窝 570

vuex概念之Getter用法详解

vuex概念之Getter用法详解

月来better 5702

js的getter和setter的基础详解

getter和setter **get**语法将对象属性绑定到查询该属性时将被调用的函数。 当尝试设置属性时,**set**语法将对象属性绑定到要调用的函数。 说白了就是:get就是:要查询的属性中有get的语法,就会调用它们绑定的函数。 例如: var obj ={ a:3, get b(){ return this.a*3 } } console.log(obj.b) //9 //这里使用get语法,给属性b绑定一个回调函数,这个函数只有在要访问对象里的这个属性时

m0_54386801的博客 3635

setter和geter的用法

封装,是为了把属于同一类事物的共性(包括属性与方法)归到一个类中方便使用。1、 概念:封装也称为信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他部分只有通过包裹在数据外面的被授权的操作来与这个抽象数据类型交流与交互。也就是说,用户无需知道对象内部方...

qq_38608582的博客 4620

解决axios跨域请求出错的问题

错误信息: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not al

遛狗的代码的博客 2万+
上一篇: Angular2踩坑之自定义Pipe管道
下一篇: Vue之自定义指令进行表单验证。
遛狗的代码
博客等级 码龄11年 10粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值