美文网首页
JS Object.defineProperty()

JS Object.defineProperty()

作者: 长不大的嘤嘤怪 | 来源:发表于2018-08-23 10:55 被阅读0次

    在探究Vue的双向绑定原理发现所依赖于Object.defineProperty()

    Object.defineProperty(obj, prop, descriptor)

    obj

    The object on which to define the property.

    prop

    The name of the property to be defined or modified.

    descriptor

    The descriptor for the property being defined or modified.

    descriptor(属性描述符)

    对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。数据描述符是一个具有值的属性,该值可能是可写的,也可能不是可写的。存取描述符是由getter-setter函数对描述的属性。描述符必须是这两种形式之一;不能同时是两者。

    *数据描述符和存取描述符均具有以下可选键值
    configurable

    当且仅当该属性的 configurable 为 true 时,该属性描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认为 false。

    enumerable

    当且仅当该属性的enumerable为true时,该属性才能够出现在对象的枚举属性中。默认为 false。

    *数据描述符
    value

    该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为 undefined

    writable

    当且仅当该属性的writabletrue时,value才能被赋值运算符改变。默认为 false

       const object1 = {};
       Object.defineProperty(object1, 'property1', {
            value: 42,
            writable: false
        });
    
       object1.property1 = 77;
    
       console.log(object1.property1);
       // 当writable为false时,代表value不可被重写,expected output: 42
       // 当writable为true时,expected output: 77
    
    *存取描述符
    get

    一个给属性提供 getter 的方法,如果没有 getter 则为 undefined。当访问该属性时,该方法会被执行,方法执行时没有参数传入,但是会传入this对象(由于继承关系,这里的this并不一定是定义该属性的对象)。默认为 undefined

    set

    一个给属性提供 setter 的方法,如果没有 setter 则为 undefined。当属性值修改时,触发执行该方法。该方法将接受唯一参数,即该属性新的参数值。默认为 undefined

    相关文章

      网友评论

          本文标题:JS Object.defineProperty()

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