JavaScript | 数据属性与访问器属性
属性类型
数据属性 - 包含一个数据值的位置,可以读取和写入值
[writable] |
是否能修改属性的值 |
true |
[enumerable] |
是否通过for in 循环返回属性(是否可以被枚举) |
true |
[configurable] |
是否能通过delete删除,能否修改属性的特性,能否修改访问器属性 |
true |
[value] |
包含这个属性的数据值,读取属性值的时候从这个位置读取。 |
undefined |
访问器属性
[enumerable] |
是否通过for in 循环返回属性(是否可以被枚举) |
true |
[configurable] |
是否能通过delete删除,能否修改属性的特性,能否修改访问器属性 |
true |
[get] |
读取属性时调用的函数 |
undefined |
[set] |
写入属性时调用的函数 |
undefined |
属性操作
- 定义属性:Object.defineProperty()
- 查看属性:Object.getOwnPropertyDescriptor()
"use strict"; // ***************************************************************** // 操作数据属性 var person = {name: 'hugh',age: 29,sayName: function() { console.log(1); } } // 修改属性默认特性:Object.defineProperty() Object.defineProperty(person, "name", {writable: true,value: 'dong',configurable: false,enumerable: false }); console.log(person);// ***************************************************************** // 操作访问器属性 var book = {_year: 2004, // _作为标记只能通过对象访问的属性edition: 0 }; Object.defineProperty(book, "year", {// 访问器属性year包含setter和getter函数get: function() {return this._year;},set: function(newValue) {this._year = newValue;this.edition = newValue - 2004;} }) book.year = 2008; console.log(book); console.log(book.edition); // 旧方法,ie8部分不支持defineProperty() // 严格模式不可用 // book._defineGetter_("year",function(){// return this._year; // }); // book._defineSetter_("year",function(newValue){// this._year = newValue; // this.edition = newValue - 2014; // });// ***************************************************************** // 定义多个属性 var book2 = {}; Object.defineProperties(book2, {// 数据属性 _year: {value: 2004,writable: false,enumerable: false,configurable: true},edition: {value: 0,writable: false,enumerable: false,configurable: true},// 访问器属性 year: {get: function() {return this._year;},set: function(newValue) {this._year = newValue;this.edition = newValue - 3000;}} }); console.log(book2);// ***************************************************************** // 查看属性的属性 console.log(Object.getOwnPropertyDescriptor(book2,'_year')); console.log(Object.getOwnPropertyDescriptor(book2,'edition')); console.log(Object.getOwnPropertyDescriptor(book2,'year'));
转载于:https://www.cnblogs.com/hughdong/p/7262539.html
JavaScript | 数据属性与访问器属性相关推荐
- Js中的数据属性和访问器属性
Js中的数据属性和访问器属性 在javaScript中,对象的属性分为两种类型:数据属性和访问器属性. 一.数据属性 1.数据属性:它包含的是一个数据值的位置,在这可以对数据值进行读写. 2.数据属性 ...
- 深入理解对象的数据属性与访问器属性及属性间相互转换
ECMA-262 第 5 版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特征.ECMAScript 中有两种属性:数据属性和访问器属性. 1. 数据属性 数据 ...
- 数据属性和访问器属性
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>数据 ...
- ECMAScript数据属性和访问器属性
ECMA-262 第 5 版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特征. ECMA-262 定义这些特性是为了实现 JavaScript 引擎用的,因此 ...
- 《js高级程序设计》6.1.1-6.1.3——数据属性、访问器属性
数据属性:该属性包含了一个数据值的位置,它包含了4个描述行为的特性: 1. [[Configurable]]:表示是否能通过delete删除属性从而重新定义属性,能否修改属性的特性,能否把属性修改为访 ...
- JS-数据属性与访问器属性
数据属性与访问器属性 1.对象属性的作用主要是数据的存储 2.既然数据存在存储,则会有增删改查相关操作(增加属性,修改属性值,获取属性值,删除属性) 3.数据属性用于控制属性的增删改查特征 4.访问属 ...
- JavaScript 使用变量访问对象属性
中括号操作符的另一个使用方式是用变量来访问一个属性.当你需要遍历对象的属性列表或查表时,这种方式极为有用. 这有一个使用变量来访问属性的例子: var someProp = "propNam ...
- 使用访问器属性模拟java中的私有变量
2019独角兽企业重金招聘Python工程师标准>>> <script>"use strict";//注意,一定要写严格模式function Emp( ...
- 【Kotlin】属性 与 幕后字段 ( 属性声明 | 属性初始化器 | 属性访问器 | field 属性幕后字段 | lateinit 延迟初始化属性 )
文章目录 I . 属性 字段 总结 II . 属性声明 III . 属性初始化器 IV . get / set 属性访问器 V . 属性幕后字段 field VI . 变量和常量的区别 VII . 延 ...
最新文章
- ubuntu 导入mysql_Ubuntu 下MySQL导入数据库.sql文件 命令
- 音视频技术开发周刊 86期
- PHP页面编码声明与用header或meta实现PHP页面编码的区别
- xp 4g内存补丁_32位操作系统导致电脑可用内存不足4G
- RAID简单介绍和Linux如何搭建一个RAID
- [转]使用Python MrJob的MapReduce实现电影推荐系统
- learun力软敏捷开发框架
- 气温和降水空间栅格数据下载RS123
- tv 斐讯n1原生android_斐讯T1刷原生安卓TV
- 高度坍塌的几种解决方法
- yarn : 无法加载文件 C:\Users\wangxin67\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.mic
- 水果店圈子:水果店开业前需要做的准备,水果店开业当天要注意哪些问题
- 元宇宙大火的“天时、地利、人和”
- 3-Go并发编程与协程Goroutine
- 尾递归优化 - 尾递归优化
- 如何去理解虚拟机的概念?
- 【数模学习笔记】【线性规划】巧用0-1变量
- 防火墙是什么,其作用是什么?
- 手把手教你如何制作和使用lib和dll
- 雪落庭院中,围炉话飞鸿——宜盾普GEN5取暖器体验札记