资讯专栏INFORMATION COLUMN

JavaScript对象内部属性及其特性总结

张金宝 / 2443人阅读

摘要:表示能否通过循环返回属性表示能否修改属性的值包含这个属性的数据值读取属性时调用的函数,默认值为写入属性时调用的函数,默认值为其中直接在对象上定义的属性,默认值均为通过方法或方法,如果不指定的值,则全部默认为。

数据属性和访问器属性
数据属性 访问器属性
共同特性 [[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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108589.html

相关文章

  • js闭包的理解

    摘要:一般来讲,函数执行完毕后,局部活动对象就会被销毁,内存中仅保存全局作用域,但是闭包的情况有所不同理解闭包的前提先理解另外两个内容作用域链垃圾回收作用域链当代码在执行过程中,会创建变量对象的一个作用域链。 闭包是javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包来实现。个人的理解是:函数中嵌套函数。 闭包的定义及其优缺点 闭包是指有权访问另一个函数作用域中的变量的...

    EasonTyler 评论0 收藏0
  • 前端面试题总结

    摘要:工作中总结的一些比较重要的前端技能,觉得在面试中比较合适提问,即能查看出面试者的技术功底,又能考察其知识体系的广度。异步编程的考察,其关键字的使用,与的关系,同时可以深入考察总共有几种异步编程的方式。 工作中总结的一些比较重要的前端技能,觉得在面试中比较合适提问,即能查看出面试者的技术功底,又能考察其知识体系的广度。适用于应届生和工作年限两年下的同学,掌握下面的知识基本满足工作需求了。...

    wuyangnju 评论0 收藏0
  • 前端面试题总结

    摘要:工作中总结的一些比较重要的前端技能,觉得在面试中比较合适提问,即能查看出面试者的技术功底,又能考察其知识体系的广度。异步编程的考察,其关键字的使用,与的关系,同时可以深入考察总共有几种异步编程的方式。 工作中总结的一些比较重要的前端技能,觉得在面试中比较合适提问,即能查看出面试者的技术功底,又能考察其知识体系的广度。适用于应届生和工作年限两年下的同学,掌握下面的知识基本满足工作需求了。...

    yangrd 评论0 收藏0
  • JavaScript基础系列---闭包及其应用

    摘要:所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。所以本文中将以维基百科中的定义为准即在计算机科学中,闭包,又称词法闭包或函数闭包,是引用了自由变量的函数。 闭包(closure)是JavaScript中一个神秘的概念,许多人都对它难以理解,我也一直处于似懂非懂的状态,前几天深入了解了一下执行环境以及作用域链,可戳查看详情,而闭包与作用域及作用域链的关系密不可分,所...

    leoperfect 评论0 收藏0

发表评论

0条评论

张金宝

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<