《深入理解ES6》之扩展对象的功能性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《深入理解ES6》之扩展对象的功能性相关的知识,希望对你有一定的参考价值。

 

属性初始值的简写

  当一个对象的属性与本地变量同名时,不必再写冒号和值,简单地只写属性名即可。

function createPerson(name,age){
    return {
        name,
        age
    };
}
//相当于
function createPerson(name,age){
    return {
        name:name,
        age:age
    };
}

对象方法的简写

  ES6中对对象字面量定义方法的语法进行了改进,消除了冒号和function关键字。

var person={
    name:"jiaxiaonuo",
    age:24,
    sayName(){
        console.log(this.name);
    }
};
//相当于
var person={
    name:"jiaxiaonuo",
    age:24,
    sayName:function(){
        console.log(this.name);
    }
};

可计算属性名

  在ES5及早期版本的对象实例中,如果想要通过计算得到属性名,就需要用方括号代替点记法。有些包括某些字符的字符串字面量作为标识符会出错,其和变量放在方括号中都是被允许的。在ES6中,可在对象字面量中使用可计算属性名称,其语法与引用对象实例的可计算属性名称相同,也是使用方括号。

let lastName="last name";
let person={
    "first name":"jia",
    [lastName]:"xiaonuo"
};
console.log(person["first name"]);//"jia"
console.log(person[lastName]);//"xiaonuo"

Object.is()方法

  由于全等运算符(===)在判断NaN===NaN的返回值为false,同时判断+0===-0时返回值为true。而正常情况下,这两个判断结果是恰恰相反。这时使用Object.is()可以对上面的不足进行正确判断。正常情况下还是使用全等运算符进行判断,只有碰到上面两种特殊情况可以使用Object.is()进行判断。

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()方法

  混合(Mixin)方法中,一个对象接收来自另一个对象的属性和方法。任何使用mixin()方法的地方都可以直接使用Object.assign()方法来替换,同时Object.assign()方法可以接受任意数量的源对象,并按指定的顺序将属性复制到接收对象中。

var receiver={};
Object.assign(receiver,
     {
        type:"js",
        name:"file.js"
     },
    { 
        type:"css"      
    } 
);
console.log(receiver.type);//"css"
console.log(receiver.css);//"file.js
 

 

重复的对象字面量属性

  ES5严格模式中加入对象字面量重复属性的校验,当同时存在多个同名属性时会抛出错误。在ES6中重复属性检查被移除,一旦出现重复属性,都会选择最后一个取值。

“use strict”

var person={
    name:"jia",
    name:"nuo"
};

console.log(person.name);//"nuo"

 

自有属性枚举顺序

  1.所有数字键按升序排序。

  2.所有字符串键按照他们被加入对象的顺序排序。

  3.所有symbol键按照他们被加入对象的顺序排序。

var obj ={
    a:1,
    0:1,
    c:1,
    2:1,
    b:1,
    1:1
};
obj.d=1;
console.log(Object.getOwnPropertyNames(obj).join(""));//"012acbd"

 

Object.setPrototypeOf()方法

  该方法可以任意指定对象的原型,他接受两个参数:被改变圆形的对象和替代第一个参数原型的对象。

let person={
    getGreeting(){
        return "hello";
    }
};
let dog={
    getGreeting(){
        return "woo";
    }
};

let friend=Object.create(person);
console.log(friend.getGreeting());//"hello"
console.log(Object.getPrototypeOf(friend)===person);//true

Object.setPrototypeOf(friend,dog);
console.log(friend.getGreeting());//"woo"
console.log(Object.getPrototypeOf(friend)===dog);//true

 

super可以简化原型访问

  必须在使用简写方法的对象中使用super引用,但如果在其他方法声明中使用会导致语法错误。

let person={
    getGreeting(){
        return super.getGreeting()+"hi!";
    }
};
//相当于

let person={
    getGreeting(){
        return Object.getPrototypeOf(this).getGreeting.call(this)+",hi!";

 

 

  

 

以上是关于《深入理解ES6》之扩展对象的功能性的主要内容,如果未能解决你的问题,请参考以下文章

深入理解ES6之《改进的数组功能》

深入理解ES6之《改进的数组功能》

《深入理解ES6》之解构

深入理解ES6之《代理和反射》

深入理解ES6之《代理和反射》

深入理解ES6之——迭代器与生成器