博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript对象内部属性及其特性总结
阅读量:6833 次
发布时间:2019-06-26

本文共 2224 字,大约阅读时间需要 7 分钟。

数据属性和访问器属性

数据属性 访问器属性
共同特性 [[enumerable]]
[[configurable]]
特有特性 [[writable]] [[get]]
[[value]] [[set]]
设置单个属性方法 Object.defineProperty(obj, prop, descriptor)
设置多个属性方法 Object.defineProperties(obj, props)
读取单个属性描述符 Object.getOwnPropertyDescriptor(obj, prop)
读取对象所有属性描述符 Object.getOwnPropertyDescriptors(obj)
备注 obj: 需要被操作的目标对象;
prop: 目标对象需要定义(读取)或修改的属性的名称;
descriptor: 将被定义或修改的属性的描述符;
props: 该对象的一个或多个键值对定义了将要为对象添加或修改的属性的具体配置;

特性详情

  • [[Configurable]]:

    • 表示能否通过delete删除属性从而重新定义属性,(设置为false,表示不能从对象中删除属性(在严格模式下调用delete会报错)),
    • 能否修改属性的特性,
    • 能否把数据属性修改为访问器属性(或相反),
    • true修改为false是单向的,即一旦把把属性定义为不可配置的,就不能再把它变回可配置了(此时只能单向修改writabletruefalse)。
  • [[Enumerable]]: 表示能否通过for-in循环返回属性
  • [[Writable]]: 表示能否修改属性的值
  • [[Value]] : 包含这个属性的数据值
  • [[Get]]: 读取属性时调用的函数,默认值为undefined
  • [[Set]]: 写入属性时调用的函数,默认值为undefined

其中直接在对象上定义的属性,
[[Configurable]],
[[Enumerable]],
[[Writable]]默认值均为true;
通过
Object.defineProperty()方法或
Object.defineProperties()方法,如果不指定
writale,
enumerable,
configurable 的值,则全部默认为 false。

定义属性

定义单个属性

Object.defineProperty(book, 'actor', {    value: 'Nicholas'})

定义多个属性

var book = {}Object.defineProperties(book,{    _year:{        writable: true,        value: 2004    },    edition:{        writable: true,        value: 1    },    // year为访问器属性    year:{        get: function(){            return this._year;        },        set: function(newValue){            if(newValue > 2004){                this._year = newValue;                this.edition += newValue - 2004;            }        }    }});// {_year: 2004, edition: 1}

读取属性的描述符

读取单个属性的描述符

Object.getOwnPropertyDescriptor(book, '_year'); // {value: 2006, writable: true, enumerable: false, configurable: false}Object.getOwnPropertyDescriptor(book, 'edition'); // {value: 3, writable: true, enumerable: false, configurable: false}Object.getOwnPropertyDescriptor(book, 'year'); // {get: ƒ, set: ƒ, enumerable: false, configurable: false}Object.getOwnPropertyDescriptor(book, 'actor'); // {value: "Nicholas", writable: false, enumerable: false, configurable: false}

读取所有属性的描述符

Object.getOwnPropertyDescriptors(book)

图片描述

注意

从上面代码
Object.getOwnPropertyDescriptor()执行结果中可以看出来,
通过Object.defineProperty()方法或Object.defineProperties()方法,如果不指定数据属性或访问器属性的writale, enumerable, configurable 的值,则全部默认为 false

转载地址:http://dcxkl.baihongyu.com/

你可能感兴趣的文章
dynamic_shift_reg SRL16E
查看>>
尝试用微博记录 SQL Server 2012开发者训练营笔记
查看>>
.Net中的5种事务总结
查看>>
为什么 Git 比 SVN 好
查看>>
关于Qt的MVC模型思想(转载)
查看>>
Vagrant支持Amazon AWS和Rackspace
查看>>
JNDI全攻略(二)(转)
查看>>
POJ1463:Strategic game(树形DP)
查看>>
SPOJ LCS(Longest Common Substring-后缀自动机-结点的Parent包含关系)
查看>>
Tuning 05 Sizing other SGA Structure
查看>>
用 Qt Creator 开发非 Qt 的 C/C++ 程序
查看>>
Android-Cannot merge new index 66195 into a non-jumbo instruction的解决的方法
查看>>
解决 com.sun.*包导入错误
查看>>
【WP 8.1开发】如何动态生成Gif动画
查看>>
C#零基础入门08:代码规范
查看>>
关于php的mysqlnd驱动
查看>>
Response
查看>>
人人都看得懂的正则表达式教程
查看>>
python matplotlib 绘图
查看>>
Uncaught RangeError: Maximum call stack size exceeded解决思路
查看>>