zoukankan      html  css  js  c++  java
  • 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 方法
  • 相关阅读:
    zookeeper项目使用几点小结
    Dubbo架构设计详解
    关于web.xml不同版本之间的区别
    bat定时执行,清除PHP缓存
    新闻列表标题省略样式
    php把时间格式化
    HTML5中的拖放
    Redis JAVA客户端 Jedis常用方法
    Redis 简介
    SpringBoot DataSource 配置说明
  • 原文地址:https://www.cnblogs.com/shenjilin/p/13964261.html
Copyright © 2011-2022 走看看