美文网首页
Object.defineProperty

Object.defineProperty

作者: woshishui1243 | 来源:发表于2020-04-04 23:51 被阅读0次
    Object.defineProperty使用

    使用Object.defineProperty方法可以给类的实例添加属性或方法,该方法有两种传参组合,对应两种不同的效果。假设,我们需要给Date的所有实例添加p熟悉,可使用下面两种方式:

    常规方法
    Object.defineProperty(Date.prototype, "p", {
    value: 4,
    enumerable: false,
    configurable: true,
    writable: true
    });
    参数解释
    Date.prototype后面那个参数,表示属性名
    value:属性默认值
    enumerable:是否可通过for-in循环,flase为不可循环,默认值为true
    configurable:是否可调用defineProperty改变定义特性,默认值为true
    writable:是否可改变值,默认值为true。为false时,假设date变量为Date类的实例,那么此时改变值的语句如:date.p = 6、delete date.p 不生效

    通过get/set方法
    假设p1参数已经存在过
    Object.defineProperty(Date.prototype, "p2", {
    enumerable: false,
    configurable: true,
    get: function() {
    return this.p1;
    },
    set: function(v) {
    this.p1 = v;
    }
    });
    参数解释
    enumerable:同上
    configurable:同上
    get:获取值的函数,通过该函数可返回需要的值(注意:如果变量名为p2,那么函数内部不要含有this.p2的取值调用,否则会无限递归)。假设date变量为Date类的实例,那么此时var p = date.p2实际是调用的get方法
    set:设置值的函数,通过该函数可设定值(注意点同理)。假设date变量为Date类的实例,那么此时date.p2 = 3实际是调用的set方法

    在get和set模式下,实际上writable介于true和false之间,改变值的语句date.p = 4能够生效,而语句 delete date.p 不生效。defineProperty函数,参数writable、value不能与get、set同时存在。

    通过Object.defineProperty(Date.prototype, name, opt)可以给类的实例添加属性和方法。而通过Object.defineProperty(Date, name, opt)可以给类添加静态熟悉和方法,如:Object.defineProperty(Date, "getInstance", {enumerable: false, configurable: true, value: function() {return new Date();} }); ,此时可这样调用函数 var date = Date.getInstance(); 返回一个实例;
    ————————————————
    版权声明:本文为CSDN博主「Vincent_Field」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/vincent_field/article/details/83046516

    相关文章

      网友评论

          本文标题:Object.defineProperty

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