Object对属性的描述

89 阅读2分钟
  •  defineProperty(给对象定义属性)   vue框架的底层核心语法

Object.defineProperty(obj,property,descriptor)

  1. 参数1:obj  绑定属性的目标对象
  2. 参数二:property   绑定的属性名
  3. 参数三:descriptor   属性描述(配置),且此参数本身为一个对象
 var obj = {}
  Object.defineProperty(obj, "a", {
    // value: "默认值", //设置a的属性值为多少
    // writeable: true,// 是否可以修改属性值,默认false
    enumerable: false, //设置属性值是否允许遍历 默认false
    configurable: false, //设置属性是否可删 默认false
    set(el) {
      console.log(el); //打印设置好的值
    },
    get() {
      // 通过get方法获取属性的值
      // 当设置get方法时,不能有value和writable方法,否则会报错
      return 100 //a=100 
    }
  });
  obj.a = 10

image.png

  •  create用来创建指定原型和属性控制的对象
var obj = {
    name: "sehun",
    age: 20
  }
  var f1 = Object.create(obj, {
    a: {
      // value: "默认值", //设置a的属性值为多少
      // writeable: true,// 是否可以修改属性值,默认false
      enumerable: false, //设置属性值是否允许遍历 默认false
      configurable: false, //设置属性是否可删 默认false
      set(el) {
        console.log(el); //打印设置好的值
      },
      get() {
        // 通过get方法获取属性的值
        // 当设置get方法时,不能有value和writable方法,否则会报错
        return 100 //a=100 
      }
    }
  });
  obj.a = 10
  console.log(f1)

image.png

  • Object.getOwnPropertyDescriptor(obj,propName) 返回obj的属性propName的属性描述符
  var arr = []
  re = Object.getOwnPropertyDescriptor(arr, "length")
  console.log(re)

image.png

  • Object.preventExtensions(obj) 可以禁止obj对象的属性扩展
  var obj = {
    hqyj: 100
  }
  var re = Object.preventExtensions(obj) //不能再添加属性
  console.log(re, re === obj)
  obj.age = 200
  console.log(obj, obj.age)

image.png

  •  Object.seal(obj) 可以禁止obj对象的属性扩展和删除,它相对与preventExtensible方法而言 ,将所有属性的configurable属性设置为false。

  •  Object.freeze(obj) 可以禁止对obj的所有操作,它相对与preventExtensible方法而言,将属性的configurable属性和writable属性都设置为了false

  • Object.isExtensible(obj)、Object.isSealed(obj)、Object.isFrozen(obj) 分别对应了上述三个方法是否对obj进行了设置