美文网首页
对象的扩展

对象的扩展

作者: 陶六六 | 来源:发表于2018-08-22 21:13 被阅读0次

    对象的扩展

    1. 属性和方法简写
          var foo ='bar'
          var baz = {foo} <=> var baz={foo:foo}
          var o ={
              func(){}
          }
          <=> var o ={
              func:function(){}
          }
      
    2. 属性名表达式
          let foo ={
              ['b'+'z']:'baz',
              *['a'+'b'](){}
          }
      
    3. 可枚举性enumerable
      for..in,Object.keys(),JSON.stringify(),Object.assign()会忽略不可枚举的属性
    4. 属性的遍历
      • for...in 遍历自身和继承的可枚举属性,不含Symbol
      • Object.keys(obj) 返回自身的所有可枚举属性键名数组,不含Symbol,配套属性Object.values(obj),Object.entries(obj)规则相同
      • Object.getOwnPropertyNames(obj) 返回自身的所有属性键名数组,包含不可枚举,不包含Symbol
      • Object.getOwnPropertySymbols(obj) 返回自身的所有Symbol属性的键名数组
      • Reflect.ownKeys(obj) 返回自身的所有属性键名数组,包括不可枚举和Symbol
    5. 描述对象
      • Object.getOwnPropertyDescriptor(obj,key) 返回指定键名的描述对象
      • Object.getOwnPropertyDescriptors(obj) 返回对象所有自身属性的描述对象
    6. 原型对象操作
      • Object.setPrototypeOf(obj,prototype)
      • Object.getPrototypeOf(obj)
      • super 指向原型对象 只能用在对象方法上,即通过简写的对象方法,super调用的原型方法内部this指向当前对象而不是原型对象
          const foo = {
              goo:super.foo,//error
              foo:()=>super.foo,//error
              doo:function(){
                  return super.foo
              },//error
              find(){
                  return super.foo
              }//ok
          }
          // super.foo() === Object.getPropertyOf(this).foo.call(this)
      

    tips

    1. 属性简写和属性名表达式不能同时使用
    2. Object.is()与===区别
      • +0===-0Object.is(+0,-0)=== false
      • NaN!==NaNObject.is(NaN,NaN)=== true
    3. Object属性遍历顺序
      1. 首先遍历数值键,按照数值升序排列
      2. 其次遍历所有字符串键,按照加入时间升序排列
      3. 最后遍历所有Symbol键,按照加入时间升序排列

    相关文章

      网友评论

          本文标题:对象的扩展

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