摘要:表示能否通过循环返回属性表示能否修改属性的值包含这个属性的数据值读取属性时调用的函数,默认值为写入属性时调用的函数,默认值为其中直接在对象上定义的属性,默认值均为通过方法或方法,如果不指定的值,则全部默认为。
数据属性和访问器属性
数据属性 | 访问器属性 | |
---|---|---|
共同特性 | [[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是单向的,即一旦把把属性定义为不可配置的,就不能再把它变回可配置了(此时只能单向修改writable从true到false)。
[[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。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/108589.html
摘要:一般来讲,函数执行完毕后,局部活动对象就会被销毁,内存中仅保存全局作用域,但是闭包的情况有所不同理解闭包的前提先理解另外两个内容作用域链垃圾回收作用域链当代码在执行过程中,会创建变量对象的一个作用域链。 闭包是javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包来实现。个人的理解是:函数中嵌套函数。 闭包的定义及其优缺点 闭包是指有权访问另一个函数作用域中的变量的...
摘要:所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。所以本文中将以维基百科中的定义为准即在计算机科学中,闭包,又称词法闭包或函数闭包,是引用了自由变量的函数。 闭包(closure)是JavaScript中一个神秘的概念,许多人都对它难以理解,我也一直处于似懂非懂的状态,前几天深入了解了一下执行环境以及作用域链,可戳查看详情,而闭包与作用域及作用域链的关系密不可分,所...
阅读 2026·2019-08-30 15:52
阅读 2390·2019-08-29 18:37
阅读 770·2019-08-29 12:33
阅读 2811·2019-08-29 11:04
阅读 1497·2019-08-27 10:57
阅读 2065·2019-08-26 13:38
阅读 2738·2019-08-26 12:25
阅读 2409·2019-08-26 12:23