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

Js中的数据属性和访问器属性

在javaScript中,对象的属性分为两种类型:数据属性访问器属性

一、数据属性

1.数据属性:它包含的是一个数据值的位置,在这可以对数据值进行读写。

2.数据属性包含四个特性,分别是:

configurable:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或能否把属性修改为访问器属性,默认为true

 enumerable:表示能否通过for-in循环返回属性(enumerable是可枚举的意思)

 writable:表示能否修改属性的值

 value:包含该属性的数据值。默认为undefined

如下面这个例子:创建一个对象person,打印出name属性的特性的默认值

执行结果:

 

对几个特性的测试:

 

测试结果:

 

3.修改数据属性的默认特性

修改属性属性的默认特性要用到一个方法:Object.defineProperty()方法,这个方法有三个参数:属性所在的对象,属性名,一个描述符对象

通过这个方法,我们可以来修改一个属性的这4个特性。

如我们对刚刚上面的penson对象里面的name属性的特性进行修改: 

执行结果:

 

结果中可以看到,person对象的name属性中的四个特性的值都相应改变了。同时后面的报错是对configurable这个特性改为false后的局限的测试。

上面的注释中是分别对各个属性修改后的影响的测试。大家可以自己运行下试试效果。

二、访问器属性

1.访问器属性:这个属性不包含数据值,包含的是一对get和set方法,在读写访问器属性时,就是通过这两个方法来进行操作处理的。

2.访问器属性包含的四个特性

configurable:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或能否把属性修改为访问器属性,默认为false

 enumerable:表示能否通过for-in循环返回属性,默认为false

 Get:在读取属性时调用的函数,默认值为undefined

 Set:在写入属性时调用的函数,默认值为undefined

这里要注意下,访问器属性不能直接定义,要通过Object.defineProperty()这个方法来定义。

下面来个例子,创建一个访问器对象book,接着打印出其year访问器属性的特性描述并对其方法进行测试打印:

 

执行结果:

 

其他两个特性configurable,enumerable的测试方式可以参照数据属性的。不过在这特别说明下,关于configurable这个特性,因为访问器属性里面这个特性默认值为false,如果程序后面需要对该属性进行delete操作等,那就在定义访问器属性时,将这个特性设置为true,不然这个会导致后面一些报错的问题。

相关文章:

  • es5和es6的区别
  • CSS3 选择器
  • 科普一下SM系列国密算法(从零开始学区块链)
  • JavaScript this 关键字
  • js中的 || 与 运算符详解
  • js中的prototype、__proto__与constructor
  • js Object方法大全
  • Vuex的五个核心概念
  • Javascript的5种基本数据类型总结
  • “use strict” 严格模式使用
  • NPM简介
  • powershell
  • webpack原理探究 打包优化
  • Webpack模块的导出以及之间的依赖引用
  • javascript中的原型与原型链
  • JavaScript函数式编程(一)
  • js面向对象
  • laravel with 查询列表限制条数
  • PhantomJS 安装
  • Python 反序列化安全问题(二)
  • React组件设计模式(一)
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • select2 取值 遍历 设置默认值
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 诡异!React stopPropagation失灵
  • 离散点最小(凸)包围边界查找
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 思维导图—你不知道的JavaScript中卷
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 小程序开发中的那些坑
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • elasticsearch-head插件安装
  • zabbix3.2监控linux磁盘IO
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • $.ajax()方法详解
  • (HAL库版)freeRTOS移植STMF103
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (转载)Google Chrome调试JS
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • []sim300 GPRS数据收发程序
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [APIO2015]巴厘岛的雕塑
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • [Flutter] extends、implements、mixin和 abstract、extension的使用介绍说明
  • [IE编程] 了解Urlmon.dll和Wininet.dll
  • [leetcode 双指针]
  • [leetcode] 61. 旋转链表
  • [LeetCode][138]【学习日记】深拷贝带有随机指针的链表