JS笔记—对象
  1. 使用var new_obj = Object.create(old_obj);创建对象new_obj指定原型为old_obj,可理解为继承

  2. 属性标签

    • 使用Object.defineProperty(obj,’attribute_name’,{value:’value’})创建单个对象属性
    • 使用Object.defineProperties来创建多个属性,示例代码:
      Object.defineProperties(person,{
          title:{value:'001',enumerable:true},
          corp:{value:'002B',enumerable:true},
      });
      
    • 对象,对象属性名,{是否可枚举(默认false),属性值}
    • 注意:创建的属性不能直接赋值
      [已知]可配置属性:

      • enumerable 是否可枚举,遍历 默认:否
      • configurable 是否可再次被修改 默认:是
      • writable 是否可修改可写 默认:否
  3. 删除对象属性:delete

    • delete obj.attribute
    • delete不能删除prototype属性
  4. 属性检测

    • 使用:attribute in obj (它会查找本身及原型链上的属性)
    • 使用:obj.hasOwnProprety (它只会查找本身的属性)
    • 检测属性是否可以被枚举:obj.propertyIsEnumerable(‘attibute’)
  5. 属性枚举

    • 使用Object.create()创建对象然后添加属性这种方式可以被枚举
    • 来自Object的属性不能被枚举
  6. getter/setter方法

    • getter/setter方法可以快速的获取或设置一个对象的属性
    • get 函数方法 set 函数方法
    • get和set设置的方法是不能被重新赋值的,
    • 重新赋值的方法就是使用Object.defineProperty来创建一个属性覆盖掉
    • 如果想直接使用赋值的方式可以更改writable的值
    • configurable[true] 必须设置为true,如果设置为false将不能删除,亦无法重新配置
    • writable[false] 设置为true可以为对象属性重新赋值,false则不能赋值也不报错
    • 参考代码:
      function foo(){}
      Object.defineProperty(foo.prototype,'z',{get:function(){return 1;}});
      var obj = new foo();
      obj.z;//1
      obj.z = 10;
      obj.z;//still 1
      //重新赋值方法
      Object.defineProperty(obj,'z',{value:100,configurable:true});
      obj.z; //100
      delete obj.z;
      obj.z;//back to 1
      
  7. 属性标签

    • Object.getOwnPropertyDescriptor(obj,"attibute"); 此方法可检测对象属性的属性
    • Object.keys(obj) 获取对象的所有key
    • Object.prventExtensions(obj) 禁止对象扩展,即不能添加新的属性
    • 使用 Object.isExtensible(obj) 查看对象是否被禁止扩展
    • Object.seal(obj) 禁止对象扩展,并禁止原先的属性修改
    • 使用Object.isSealed(obj) 来查看对象是否被隐藏,是否
    • Object.freeze(obj) 冻结对象,处理
    • 使用Object.isFrozen(obj) 来查看对象是否被冻结
  8. 序列化

    • 使用JSON.stringify(obj) 序列化对象
    • 当对象值中出现undefined,Infinity,NaN时都会变成null
    • 使用JSON.parse 解析JSON
    • 自定义序列
      var obj = {
          x:1,
          y:2,
          o:{
              o1:1,
              o2:2,
              toJSON:function(){
                  return this.o1 + this.o2;
              }
          }
      }
      JSON.stringify(obj);
      
  9. 其他对象方法

    • toString()valueOf
    • 使用toString来实现自定义的toString,valueOf
      var obj = {x:1,y:2};
      obj.toString = function(){
          return this.x + this.y
      };
      "Result " + obj; // "Result 3"
      +obj; // 3  
      
    • 当对象进行运算时,js会将其进行转换为基本类型,会先查找valueOf,如何还是对象则会查找toString,如果还是对象就会报错
1 分享 二维码
分类:代码笔记
还没有评论


在此输入评论..
0/100