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 方法
  • 相关阅读:
    嵊泗
    窗函数介绍
    射频与微波测量之失真参数
    C# 文件与路径操作
    史密斯圆图
    Winform 关闭Form而不销毁Form的内存
    射频与微波测量之S参数
    东极岛
    C#中正则表达式解析字符串信息
    射频微波相关公式
  • 原文地址:https://www.cnblogs.com/shenjilin/p/13964261.html
Copyright © 2011-2022 走看看