• 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()方法。

  • 相关阅读:
    简单线程池的设计
    MFC开发--截图工具
    Win32小游戏--蜘蛛纸牌
    C++语言动态创建对象
    C++语言类之间的关系
    c++语言虚函数实现多态的原理(更新版)
    5-24 c++语言之【基础知识】
    小细节--关于printf的输出问题
    Win32小游戏--贪吃蛇
    2020北大夏令营 终末游记
  • 原文地址:https://www.cnblogs.com/PolarisSky/p/5143787.html
Copyright © 2020-2023  润新知