• 《深入理解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!";

      

  • 相关阅读:
    TCP三次握手过程
    btree b+tree 的关系
    volatile和指令重排序
    事务一致性理解 事务ACID特性的完全解答
    JVM 详解
    java 并发 详解
    socker TCP UDP BIO NIO
    mysql 主从复制 配置
    身份证格式验证 方法
    分布式事务 XA 两段式事务 X/open CAP BASE 一次分清
  • 原文地址:https://www.cnblogs.com/jiaxiaonuo/p/7289945.html
Copyright © 2020-2023  润新知