对象
对象是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中
网友评论