• Javascript学习笔记:对象的属性类型


    在ECMAScript中有两种属性:数据属性和访问器属性

    1、数据属性

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

    enumerable:表示能否通过for-in循环返回属性。

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

    value:包含这个属性的数据值,读取属性的时候,从这个位置读;写入属性的时候,把新的值保存在这个位置。

    2、访问器属性

    configurable:表示能否通过delete删除属性从而重新定义属性;或者能否修改属性的特性;或者能否把属性修改为数据属性。

    enumerable:表示能否通过for-in 循环返回属性。

    get:在读取属性的时候调用的函数。

    set:在设置属性的时候调用的函数。

    ①对于直接在对象上定义的属性,configurable、enumerable、writable的默认值为true:

    var person={};
    person.name="张三";
    console.log(Object.getOwnPeopertyDescriptor(person,'name')) //Object {value: "张三", writable: true, enumerable: true, configurable: true}

    ②对于通过Object.defineProperty()或者Object.defineProperties()定义的属性,configurable、enumerable、writable的默认值为false:

    var person={};
    Object.defineProperty(person,'name',{value:'张三'});
    console.log(Object.getOwnPropertyDescriptor(person,'name'));//Object {value: "张三", writable: false, enumerable: false, configurable: false}

    ③当configurable设置为false时,所有的属性就不能重新设定,也不能删除了。但是当configurable设置为false时,writable设置为true时,value属性的值是可以被直接更改的,但是当writable再次设置为false时,writable属性就不能重新设置回true了。

    var b={};
    Object.defineProperty(b,'b',{configurable:false,writable:true});
    Object.getOwnPropertyDescriptor(b,'b')//Object {value: undefined, writable: true, enumerable: false, configurable: false}
    Object.defineProperty(b,'b',{writable:false})
    Object.getOwnPropertyDescriptor(b,'b')//Object {value: undefined, writable: false, enumerable: false, configurable: false}
    Object.defineProperty(b,'b',{writable:true})//Uncaught TypeError: Cannot redefine property: b(…)

    ④访问器属性不能直接定义,只能通过Object.defineProperty()来定义。

    ⑤当访问器属性只设置了get属性,那么该属性是只读的;反之,当访问器属性只设置了set属性,那么该属性是只写的。

    ⑥一次性定义多个属性,可以用Object.defineProperties()

    var person={};
    Object.defineProperties(person,{name:{value:'张三',configurable:true},sex:{value:'男',writable:true}});
    Object.getOwnPropertyDescriptor(person,'name')//Object {value: "张三", writable: false, enumerable: false, configurable: true}
    Object.getOwnPropertyDescriptor(person,'sex')//Object {value: "男", writable: true, enumerable: false, configurable: false}

     ⑦查看对象对应的属性的configurable、enumerable、writable的值可以通过Object.getOwnPropertyDescriptor()方法。

  • 相关阅读:
    Linux ,Ubuntu 分区建议大小
    [No000019A]【波浪理论精典教学课程】
    CS(计算机科学)知识体
    如何量化考核技术人的KPI?
    Linux系统的命令应该如何记?
    数学和物理太难?这些 GIF 让你秒懂抽象概念
    加密数字货币的 7 个致命悖论
    量子力学中,全体自然数之和是负十二分之一,物理意义是什么?
    30岁左右的人,来谈谈你犯了哪些错误?
    一篇文章学懂Shell脚本,最简明的教程在这里
  • 原文地址:https://www.cnblogs.com/PolarisSky/p/5143787.html
Copyright © 2020-2023  润新知