javascript 访问器属性创建的三种方式

出自 javascript高级程序设计-第六章6.1节

javascript 访问器属性创建的三种方式:

以下year字段都是访问器属性,_yearedition是数据属性。

var book1 = { _year: 2000, edition: 1 
}; 
Object.defineProperty(book1, "year", { get: function(){ return this._year; }, set: function(newValue){ if (newValue > 2000) { this._year = newValue; this.edition += newValue - 2000; } } 
}); 
book1.year = 3000; 
console.log(book1.year); // 3000
console.log(book1.edition); // 1001

var book2 = { _year: 2000, edition: 1 
}; 
//定义访问器的旧有方法
book2.__defineGetter__("year", function(){ return this._year; 
}); 
book2.__defineSetter__("year", function(newValue){ if (newValue > 2000) { this._year = newValue; this.edition += newValue - 2000; } 
});
book2.year = 3000; 
console.log(book2.year); // 3000
console.log(book2.edition); // 1001

// 定义多个属性
var book3 = {};
Object.defineProperties(book3, {_year: { value: 2000,writable:true // 书中没写这个,运行后会发现修改值book3.year=3000无效,writable不配置的话默认false,就不能改。故这里加上}, edition: { value: 1 ,writable:true}, year: { get: function(){return this._year; }, set: function(newValue){              this._year = newValue; this.edition += newValue - 2000;              } } 
});
book3.year = 3000; 
console.log(book3.year); // 3000
console.log(book3.edition); // 1001

book3 跟上面两book对象的唯一区别就是_yeareditionyear 这几个属性是同时创建的


获取属性的特性

book1,book2,book3都能这样获取,这里以book3为例:

// Object.getOwnPropertyDescriptor()方法,返回值是一个对象。
// 如果是访问器属性,这个对象的属性有 configurable、enumerable、get 和 set。
// 如果是数据属性,这个对象的属性有 configurable、enumerable、writable 和 value。
var descriptor = Object.getOwnPropertyDescriptor(book3, "_year"); 
console.log(descriptor.value); // 3000
console.log(descriptor.configurable); // false
console.log(descriptor.writable); // true
console.log(typeof descriptor.get); // "undefined"var descriptor = Object.getOwnPropertyDescriptor(book3, "year"); 
console.log(descriptor.value); // undefined
console.log(descriptor.configurable); // false
console.log(typeof descriptor.get); // "function"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

岚图追光PHEV 25.28万元起售,开卷混动豪华轿车

作者|Amy 编辑|德新 12月5日晚,2023岚图科技日上,岚图汽车正式发布了其新一代SOA电子电气架构天元架构,并宣布了以“新行政电动旗舰”为定位的岚图追光PHEV正式上市。 岚图追光PHEV是岚图汽车旗下首款电混轿车&#x…

selenium自动化测试:xpath八种定位方式!

01、前言 如果可以的话,请先关注(专栏和账号),然后点赞和收藏,最后学习和进步。你的支持是我继续写下去的最大动力,个人定当倾囊而送,不负众望。谢谢!!! 1.…

【springboot】整合redis和定制化

1.前提条件:docker安装好了redis,确定redis可以访问 可选软件: 2.测试代码 (1)redis依赖 org.springframework.boot spring-boot-starter-data-redis (2)配置redis (3) 注入 Resource StringRedisTemplate stringRedisTemplate; 这里如果用Autowi…

一台服务器能放多少个网站?

这个问题有点意思,确实是有不少用户会问到,但其实这个问题的真正意思是,一台服务器上面放多少个网站不卡,打开不慢 。其实这个问题又有点复杂,一台服务器放多少个网站不会卡,跟很多因素有关,比如…

docker安装及简单使用(Linux版本)

文章目录 前言一、docker安装二、docker命令pull(安装镜像)images(查看镜像)run(创建容器)删除容器exec(进入运行中的容器)常用命令 总结如有启发,可点赞收藏哟~ 前言 ht…

Python 进阶(十三):JSON 序列化和反序列化(json 模块)

大家好,我是水滴~~ 本篇文章主要介绍json模块的功能,包括将Python对象序列化到文件、将Python对象序列化为字符串、序列化时类型的对照表、将文件中JSON数据反序列化为Python对象,将JSON字符串反序列化为Python对象、反序列化时类型的对照表…

Python 模块的使用方法

Python 模块是一种组织和封装代码的方式,允许你将相关的功能和变量放在一个单独的文件中,以便在其他程序中重复使用。在Python中,模块是一种可执行的Python脚本,其文件扩展名为 .py。这里,我将详细讲解Python模块的使用…

2023中医药国际传承传播大会在深圳召开

12月2日,2023中医药国际传承传播大会在深圳召开,大会由世界针灸学会联合会、中新社国际传播集团、中国新闻图片网、中国民族医药学会、中国针灸学会主办,世界针灸学会联合会健康传播工作委员会、中新雅视文化发展有限公司公司与深圳巨邦传媒集…

播放pcap抓包文件中的amr-wb、amr-nb、evs声音

前言 由于wireshark并不能解析amr-wb、evs数据,所以也就没办法播放响应的音频。在遇到问题时,想还原抓包的数据是否正常就很难受。为了解决这个问题,我看了RFC4867,想着自己写一个解包小工具,最后彻底放弃。。感觉太复…

Qt Creator :Analyze heob 使用教程

功能:在windows系统上检测和调试软件代码的内存泄漏情况; 使用环境 :需要下载 heob和dwarfstack 把dwarfstack动态库放在heob的执行程序目录下 使用步骤: 第三步:配置启动调试程序 第四步:配置heob的路…

什么因素会影响葡萄酒陈酿的能力?

糖、酸和酚类与水的比例是葡萄酒陈酿程度的关键决定因素,收获前葡萄中的水分越少,产生的葡萄酒就越有可能具有一定的陈酿潜力。那么葡萄品种、气候和葡萄栽培实践的过程就相当重要了,对陈酿的时间发挥了重要的作用。皮较厚的葡萄品种&#xf…

C++ 中的运算符重载(二)

运算符重载的实例和应用 运算符重载是一种非常实用和有趣的特性,它可以让我们对自定义类型的数据进行各种操作,从而实现一些复杂和高级的功能。下面我们就来介绍一些运算符重载的实例和应用,以及它们的代码和效果: 重载赋值运算…

docker:安装nginx并部署一个前端项目

文章目录 导语传统方式1、下载镜像2、copy项目文件到docker中3、访问 打包镜像的方式1、创建 Dockerfile2、创建 Nginx 配置文件3、构建 Docker 镜像4、运行 Docker 容器5、访问前端项目 总结 导语 这篇博客将介绍 docker 使用 nginx 部署前端项目的两种方式 传统方式 1、下…

C语言给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)

这个题目要求的输出是一串数字!!! 不是下面:输入在一行中给出 10 个非负整数,顺序表示我们拥有数字 0、数字 1、……数字 9 的个数。整数间用一个空格分隔。10 个数字的总个数不超过 50,且至少拥有 1 个非…

Python自动化测试之破解图文验证码

对于web应用程序来讲,处于安全性考虑,在登录的时候,都会设置验证码, 验证码的类型种类繁多,有图片中辨别数字字母的,有点击图片中指定的文字的,也有算术计算结果的,再复杂一点就是滑…

软考人数已超500万!请重视!

2020年40万,2021年94万,2022年129万,2023年软考报考人数已超500万!2年时间直翻10倍!如此火爆原因是什么? 不是打广告!不是打广告!不是打广告 千万不要上了”黑心培训结构“当&#x…

App的回归测试,有什么高效的测试方法?

直接抛出观点:高效的测试方法当然有,那就是采用【接口自动化】。 一、回归测试,测哪些东西 回归测试是软件测试过程中的一个重要的环节,如果说冒烟测试是对软件质量的抽检,那么回归测试就是保证软件质量的最后一道屏障…

集合01 - Java

集合 1、数组的不足2、集合3、集合的框架体系(背)CollectionMap 1、数组的不足 前面我们保存多个数据使用的是数组,那么数组有不足的地方,我们分析一下。 数组: 长度开始时必须指定,而且一旦指定,不能更改…

Linux环境变量与命令行参数

Linux环境变量与命令行参数 一.命令行参数1.语法2.应用1:简易计算器 二.环境变量1.环境变量的概念2.环境变量的作用3.进一步理解环境变量的作用4.常见环境变量5.导出环境变量(添加环境变量)6.环境变量的特性7.另一种获取环境变量的方式8.小功能:用于身份验证的代码9.补充:第三种…

SAP CA01/CA02 创建及更新工艺路线BAPI

前言 最近需要做一个routing的批导,初步查过资料后,发现下面几个BAPI: BAPI_ROUTING_CREATE:最常用的BAPI,只支持创建,没有对应的CHANGE BAPI; ROUTING_MAINTAIN:不支持创建,只支…