当前位置: 首页 > news >正文

js中get,set用法

1、作为对象的访问器属性

//使用Object.definePropertylet obj = {_a:'123'};Object.defineProperty(obj, "a", {get() {return this._a;},set(val) {this._a=val},});console.log(obj.a);  //123obj.a='456'console.log(obj.a) // 456
//使用对象字面量let obj= {_a:'123',get a(){return this._a},set a(val){this._a=val}}console.log(obj.a);  //123obj.a='456'console.log(obj.a)  // 456

注意:访问器属性通常对应一个数据属性,且不同名,否则可能会导致栈溢出。

2、作为class类的get,set函数,作为实例的访问器属性

 class Test {constructor() {this.a='123'}get _a() {console.log('执行了get')return this.a}set _a(val) {console.log('执行了set')this.a = val;}}

注意:如果发生以下情况:定义一个属性和获取、设置函数同名,而且是直接写在类块中,set,get将会 失效。

 class Test {_a='456'constructor() {this.a='123'}get _a() {console.log('执行了get')return this.a}set _a(val) {console.log('执行了set')this.a = val;}}

同样,也要注意设置函数和获取函数中访问的值或设置的值不能和函数同名,否则一样会栈溢出。

3、作为代理处理程序中的捕获器函数。

let target = {};let handler = {get(target, prop) {return Reflect.get(...arguments);},set(target, prop, val) {Reflect.set(...arguments);},};

相关文章:

  • 深度学习 视觉处理(CNN) day_02
  • 力扣-206.反转链表
  • SecMulti-RAG:兼顾数据安全与智能检索的多源RAG框架,为企业构建不泄密的智能搜索引擎
  • 在 Spring Boot 项目中如何使用索引来优化 SQL 查询?
  • 再见,物理删除!MyBatis-Plus @TableLogic 优雅实现逻辑删除
  • 【ESP32S3】 下载时遇到 libusb_open() failed 解决方案
  • python如何取消word中的缩进
  • Unity3D IK解算器技术分析
  • 基于AIGC的3D场景生成实战:从文本描述到虚拟世界构建
  • BT150-ASEMI机器人率器件专用BT150
  • OceanBase 跻身 Forrester 三大领域代表厂商,全面支撑AI场景
  • 【C++游戏引擎开发】第24篇:级联阴影映射(CSM,Cascaded Shadow Maps)
  • springboot3 声明式 HTTP 接口
  • HTML 地理定位(Geolocation)教程
  • hadoop-3.3.5.tar.gz 镜像
  • OpenHarmony之电源模式定制开发指导
  • 策略模式(Strategy Pattern)详解
  • 2、Ubuntu 环境下安装RabbitMQ
  • 【高频考点精讲】前端构建工具对比:Webpack、Vite、Rollup和Parcel
  • 内联函数(c++)
  • 新华时评:坚定不移办好自己的事,着力抓好“四稳”
  • 哈工大赵杰:人形机器人要拓展人的能力而非一味复制,未来产业要做成至少10年
  • 沈阳市委常委马原出任阜新市委副书记、市政府党组书记
  • 巴勒斯坦民族权力机构主席:哈马斯必须移交武器
  • 王珊珊读《吾自绝伦》|摘掉皮普斯的“假发”
  • 全国人大常委会调研组在宁波调研,张庆伟带队钟山易炼红参加