ES6规范清晰的定义了对象的类别
- 普通对象 具有JavaScript对象所有的默认内部行为
- 特异对象 具有某些与默认行为不符的内部行为
- 标准对象 ES6中规范定义的对象
- 内建对象 脚本开始执行时存在于JavaScript执行环境中的对象,所有标准对象都是内建对象
对象字面量语法的扩展
- 属性初始化简写语法:当一个对象的属性与本地变量同名时,不必要再写冒号和值,简单地只写属性名即可。当对象字面量里只有一个属性的名称时,JavaScript引擎会在可访问作用域中查找其同名变量,如果找到,则该变量的值被复赋值给对象字面量里的同名属性
function Person(name,age) {
reutrn {
name,
age
}
}
- 对象方法的简写语法:消除了冒号和关键字
function
,与传统对象方法的区别是简写方法可以使用super关键字
let person = {
name:'tgb',
sayName() {
console.log(this.name);
}
}
- 可计算属性名:在ES6中可以在对象字面量中使用可计算属性名称,对象字面中使用方括号表示该属性名称时可计算的
let suffix = 'name'
let person = {
['first'+suffix]: 'Nicholas',
['last'+suffix]:'Zakas'
}
console.log(person['first name']);
console.log(person['last name']);
ES6新增方法
- Object.is()方法:这个方法接受两个参数,如果两个参数的类型相同且具有相同的值,则返回true。用来弥补全等运算符的不准确运算。
console.log(+0 === -0) //true;
console.log(Object.is(+0,-0)); //false
console.log(NaN === Nan); //false
console.log(Object.is(NaN,NaN)) //true
- Object.assign()方法:混入方法,这个方法接受一个对象和任意数量的源对象,最终返回接受对象
let obj = {};
Object.assign(obj,
{
type:'js';
name:'file.js'
},
{
type:'css //如果多个源对象具有同名的属性则排位靠后的源对象会覆盖排位靠前的
}
)
console.log(obj.type); //'css'
console.log(obj.name); //'file.js'
增强对象原型
- ES6新增
Object.setPrototypeOf()方法
:这个方法可以改变任意指定对象的原型,它接受两个参数;被改变的对象原型的对象以及要替代第一个参数原型的对象
let person = {
getGreeting() {
return 'Hello';
}
};
let dog = {
getGreeting() {
return 'Woof'
}
}
let friend = Object.create(person);
console.log(Object.getPrototypeOf(firend)===person); //true
Object.setPrototypeOf(friend,dog);
console.log(Object.getPrototypeOf(friend)===dog); //true
- 简化原型访问的Super引用
- Super引用相当于指向对象原型的指针,就是Object.getPrototypeOf(this)的值
网友评论