美文网首页
es6中对象扩展

es6中对象扩展

作者: 单只蝴蝶_569d | 来源:发表于2020-08-21 14:41 被阅读0次

    对象

    对象是js最重要的一个数据类型,在es6中,对象的功能也得到了增强

    对象的函数简写

    • 对象简写
      在es5中对象的函数写法
    const person={
        getname:function(){
            return '张三'
        }
    }
    

    在es6中的写法可以简写为

    const person={
        getname(){
            return '张三'
        }
    }
    

    并且在es6中,对象中变量不可重复,不然会报错

    • 计算属性名
    var suffix = " name";
    var person = {
     ["first" + suffix]: "Nicholas",
      ["last" + suffix]: "Zakas"
    };
    

    对象的增强

    setPropertypeOf 修改原型对象

    对象的原型增强,es5中对象原型是在创建的过程中创建的,es6中新增了原型的修改.以下例子,将person1对象的原型修改为person对象中

    const person={
        getName(name){
            console.log(12)
            return name;
        }
      }
    
     const person1={
    }
    let friend=Object.create(person) // 创建一个对象friend,原型为person
    Object.setPrototypeOf(person1,person) // 将原型设置为person
     console.log(person1.getName('zhng')) 
    

    super

    在es5中,调用原型的函数时,需要以以下方式

    let person = {
      getGreeting() {
        return "Hello";
      }
    };
    let friend = {
       getGreeting() {
         return Object.getPrototypeOf(this).getGreeting.call(this) + ", hi!";
       }
    };
    // 将原型设置为 person
    Object.setPrototypeOf(friend, person);
    console.log(friend.getGreeting()); // "Hello,hi"
    

    在es5中调用函数的原型主要使用Object.getPrototypeOf 来获取对象的原型,call(this),是为了保证原型方法中this值的指向,在使用的过程中比较复杂。并且多层原型继承,容易出现this指向问题
    super关键字用于访问和调用一个对象的父对象上的函数。super关键字只能用于简写的函数写法,在有function关键词的函数中无效.使用super关键词改写以上的例子如下:

    let person = {
    getGreeting() {
    return "Hello";
    }
    };
    let friend = {
    getGreeting() {
    return super.getGreeting() + ", hi!";
    }
    };
    // 将原型设置为 person
    Object.setPrototypeOf(friend, person);
    console.log(friend.getGreeting()); // "Hello,hi"

    super关键词总能指向正确的原型对象
    
    ### 新增的方法
    * Object.is(obj1,obj2)
      当在 JS 中要比较两个值时,你可能会使用相等运算符( == )或严格相等运算符( ===)。为了避免在比较时发生强制类型转换,许多开发者更倾向于使用后者。但严格相等运算符也并不完全准确,例如,它认为 +0 与 -0 相等,即使这两者在 JS 引擎中有不同的表示;另外 NaN === NaN 会返回 false ,因此有必要使用 isNaN() 函数来正确检测 NaN 。
       因此在es6中引入了Object.is方法来弥补以上问题,object.is可以传入2个参数,当2着的值时,返回true。否则返回false
    

    Object.is(5, 5) //true

    在许多情况下, Object.is() 的结果与 === 运算符是相同的,仅有的例外是:它会认为+0 与 -0 不相等,而且 NaN 等于 NaN 。不过仍然没必要停止使用严格相等运算符,选择 Object.is() ,还是选择 == 或 === ,取决于代码的实际情况。
    * Object.assign(obj1,obj2)
    将obj2对象的属性和值合并到对象obj1中
    
    
    
    
    
    

    相关文章

      网友评论

          本文标题:es6中对象扩展

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