美文网首页
Object.defineProperty

Object.defineProperty

作者: BULL_DEBUG | 来源:发表于2018-10-15 10:33 被阅读8次

    传送门

    ECMAScript 262v5带来的新东西,FF把它归入为javaScript 1.8.5的功能之一。

    语法:

    Object.defineProperty(obj, prop, descriptor)

    参数:

    obj:目标对象

    prop:需要定义的属性或方法的名字。

    descriptor:目标属性所拥有的特性。

    可供定义的特性列表:

    • value:属性的值
    • writable:如果为false,属性的值就不能被重写。
    • get: 一旦目标属性被访问就会调回此方法,并将此方法的运算结果返回用户。
    • set:一旦目标属性被赋值,就会调回此方法。
    • configurable:如果为false,则任何尝试删除目标属性或修改属性以下特性(writable, configurable, enumerable)的行为将被无效化。
    • enumerable:是否能在for...in循环中遍历出来或在Object.keys中列举出来。
      try {
          var a = {};
           Object.defineProperty(a,"bloger",{get:function(){return "司徒正美"}});
            alert(a.bloger)
       } catch(e) {
            alert("你的游览器不支持Object.defineProperty ")
       }
          
    

    利用writable特性轻易实现“不变模式”

        try {
           var obj = { foo: "test" };
            alert(JSON.stringify(Object.getOwnPropertyDescriptor( obj, "foo" )));
        } catch(e) {
            alert("你的游览器不支持Object.defineProperty或 Object.getOwnPropertyDescriptor")
        }
          
    
      let obj = {
        test: "hello"
      }
      let initVal = 'Hi'
      // 对象已有的属性添加特性描述
      Object.defineProperty(obj, "test", {
        // value: 'world', // 当使用了getter或setter方法,不允许使用writable和value这两个属性
        // writable: true,
        get: function() {
          return initVal;//当获取值的时候触发的函数
        },
        set: function(value) {
          initVal = value;//当设置值的时候触发的函数,设置的新值通过参数value拿到
        },
        configurable: true,
        enumerable: true
      });
      Object.defineProperty(obj, "newKey", {
        value: 'newWorld', // 值
        writable: true,  // 可否被重写
        // get: function(){
    
        // },
        // set: function() {
    
        // },
        configurable: true,  // 是否可以删除目标属性或是否可以再次修改属性的特性
        enumerable: true // 可否被枚举 for (let attr in obj){}
      });
      console.log(obj);
      console.log(initVal);
    

    相关文章

      网友评论

          本文标题:Object.defineProperty

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