es6中对象扩展

2020-08-21  本文已影响0人  单只蝴蝶_569d

对象

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

对象的函数简写

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中





上一篇下一篇

猜你喜欢

热点阅读