美文网首页
理解 Object.defineProperty / Objec

理解 Object.defineProperty / Objec

作者: littleFen | 来源:发表于2017-07-14 10:14 被阅读0次

    Object.defineProperty / Object.defineProperties

    enumerable 是否可枚举,可以利用这一特性设置一些私有属性

    value,只要writable和configurable有一个为true,就允许改动

    基本上,JavaScript 原生提供的属性都是不可枚举的,用户自定义的属性都是可枚举的。

    与枚举性相关的几个操作的区别的是,for...in循环包括继承自原型对象的属性,Object.keys方法只返回对象本身的属性。如果需要获取对象自身的所有属性,不管是否可枚举,可以使用Object.getOwnPropertyNames方法,详见下文。

    考虑到JSON.stringify方法会排除enumerablefalse的值,有时可以利用这一点,为对象添加注释信息。

    var o = {a: 1, b: 2};
    
    o.c = 3;
    Object.defineProperty(o, 'd', {
      value: 4,
      enumerable: false
    });
    
    o.d // 4
    
    for (var key in o) {
      console.log(o[key]);
    }
    // 1
    // 2
    // 3
    
    Object.keys(o)  // ["a", "b", "c"]
    
    JSON.stringify(o) // "{a:1, b:2, c:3}"
    
    // ======================================
    
    var car = {
      id: 123,
      color: 'red',
      ownerId: 12
    };
    
    var owner = {
      id: 12,
      name: 'Jack'
    };
    
    Object.defineProperty(car, 'ownerInfo', {
      value: owner,
      enumerable: false
    });
    
    car.ownerInfo
    // {id: 12, name: "Jack"}
    
    JSON.stringify(car)
    //  "{"id": 123,"color": "red","ownerId": 12}"
    

    相关文章

      网友评论

          本文标题:理解 Object.defineProperty / Objec

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