• JS对象属性描述


    属性描述符的结构

      在定义对象, 定义属性时, 属性描述符一共有6个

    • value:  设置属性的值, 默认值为undefined
    • writable:  设置属性值是否可写, 默认值为true
    • enumerable: 设置属性是否可枚举, 即是否允许使用 for/in 语句或 Object.keys() 函数遍历访问, 默认值 true
    • configurable: 设置是否可设置属性特性, 默认为true, 如果为false, 将无法删除属性, 不能够修改属性值, 也不能修改属性的属性的描述符的值
    • get: 取值函数, 默认为undefined
    • set: 存值函数, 默认为undefined

      get和set函数

    var obj = {
        _x : 1,  //定义_x属性
        get x() { return this._x },  //定义x属性的getter
        set x(value) {  //定义x属性的setter
            if (typeof value != "number") throw new Error('请输入数字');
            this._x = value;  //赋值
        }
    };
    console.log(obj.x);  //1
    obj.x = 2;
    console.log(obj.x);  //2

    操作属性描述符

    属性描述符是一个内部对象, 无法直接读写, 可以通过下面几个函数进行操作

    • Object.getOwnPropertyDescriptor(): 可以读出指定对象私有属性的属性描述符
    • Object.defineProperty(): 通过定义属性描述符来定义或修改一个属性, 然后返回修改后的描述符
    • Object.defineProperties(): 可以同时定义多个属性描述符
    • Object.getOwnPropertyNames(): 获取对象的所有私有属性
    • Object.keys(): 获取对象的所有本地可枚举的属性
    • propertyIsEnumerable(): 对象实例方法, 直接调用, 判断指定的属性是否可枚举

    控制对象状态

    • Object.preventExtensions: 阻止为对象添加新的属性
    • Object.seal: 阻止为对象添加新的属性, 同事也无法删除就属性. 等价于属性描述符的 configurable 属性设为false, 该方法不影响修改某个属性的值
    • Object.freeze: 阻止为一个对象添加新属性, 删除就属性, 修改属性值
    • Object.isExtensible: 检查一个对象是否允许添加新的属性
    • Object.isFrozen: 检查一个对象是否使用了Object.freeze 方法
  • 相关阅读:
    ABP 前端 组件之间传递参数的几种方式
    angular Form 自定义验证
    Docker 启用失败 failed to start docker Application container Engin
    C# 委托与事件
    c# Application.DoEvents()
    c# 泛型
    Ubuntu如何挂载U盘
    jdk1.8 List根据时间字段倒序排序
    yarn安装模块报错:check python checking for Python executable "python2" in the PATH
    yarn : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。
  • 原文地址:https://www.cnblogs.com/shenjilin/p/13964261.html
Copyright © 2020-2023  润新知