美文网首页
Object.defineProperty()

Object.defineProperty()

作者: skoll | 来源:发表于2022-06-17 10:31 被阅读0次

    简介

    1 .直接在一个对象上定义一个新属性或者修改一个对象的现有属性
    2 .通过赋值操作添加的属性通常是可以枚举的,会被for in,Object.keys

    语法

    Object.defineProperty(obj,prop,descriptor)
    1 .obj:要定义属性的对象
    2 .要定义的对象或者修改的属性
    3 .要定义或者修改的属性描述符

    1 .默认添加的属性不能被枚举,不能被删除,值是undefined
     const obj = {};
     Object.defineProperty(obj, 'age', {})
    //这样给一个对象添加了属性,这个属性不能被修改,不能被遍历,不能被删除.默认值是undefined
    
    2 .configurable:true.属性的描述符才能被改变,属性可以被删除.默认是false.除 value 和 writable 特性外的其他特性是否可以被修改.感觉是一个总的锁.当为false的时候,可以被复制,不报错,但是不会成功
    3 .wriable:true.value才能被赋值运算符改变.如果原型对象的某个属性的writable为false,那么子对象将无法自定义这个属性,writable属性只能从true改为false,反着来是会报错的.
    4 .enumerable:返回一个布尔值,表示目标属性在for in Object.keys,JSON.stringify中是否可以遍历
    

    4 .属性的值value,只要writable,configure一个是true,就允许改动
    5 .注意:这些属性不一定是自身属性,有的时候也要考虑继承来的属性.
    6 .修改属性:如果属性已经存在的话,Object.defineProperty将尝试根据描述符中的值以及对象当前的配置来修改这个属性.如果旧属性的描述符将其configureable属性设置为false.改属性被认为是不可配置的,并且没有属性可以被改变,除了单独改变wirtable为false.
    7 .当视图改变不可配置属性的值时,会报错typeerror,除了value,writable值,除非和之前的值相同.

    总结

    1 .使用点运算符和Object.defineProperty为对象的属性赋值,数据描述符中的属性默认值是不同的.默认全是true

    var o = {};
    
    o.a = 1;
    // 等同于:
    Object.defineProperty(o, "a", {
      value: 1,
      writable: true,
      configurable: true,
      enumerable: true
    });
    

    相关文章

      网友评论

          本文标题:Object.defineProperty()

          本文链接:https://www.haomeiwen.com/subject/qemxvrtx.html