美文网首页
ES6 特性

ES6 特性

作者: 33jubi | 来源:发表于2020-05-18 15:57 被阅读0次

    ES6

    readable usable matainable

    1.Arrow Function

    function name(){};
    函数是一等公民
    解决:打底3行起步,可以不需要大括号

    1.
    const sum = (num1,num2)=>num1+num2;
    2.
    var getStudent = (name,age)=>({
        name:name,
        age:age,
    });
    3.箭头函数体内的 this对象,就是定义时所在的对象,而不是使用时所在的对象
    var Person  =  function(name){
      this.name = name;
      this.getName=()=>this.name;
    }
    var alice = new Person();
    alice.getName()//alice
    //Person.prototype.getName=()=>this.name
    //alice.getName()//undefined
    //但如果上诉包在function里就会是alice
    
    

    圆括号=>示意是一个返回函数,该用例就是返回一个object

    2.Class

    class Person{
      constructor(name){
        this.name = name;
      }
      sayHi(){
        console.log('my  name is '+this.name);
      }
      joinMeeting(meeting){
      //meeting.talks.push(this.sayHi);
        meeting.talks.push(()=>this.sayHi());//这样可以传递this指的值
      }
    }
    class Meeting{
      constructor(){
        this.talks = [];
      }
      start(){
        function talk(t){
          t();
        }
        this.talks.forEach(talk);
      }
      
    }
    
    var alice = new Person('Alice');
    var  bob = new Person('Bob');
    
    var standup = new Meeting();
    
    alice.joinMeeting(standup);
    bob.joinMeeting(standup);
    standup.start();
    

    3.let/const

    let/const所声明的变量,只在其命令所在的代码块内有效
    var有‘变量提升’现象,即变量可以在声明前使用,值为undefined
    块级作用域
    {}

    4.template string模版字符串

    嵌入变量
    换行
    ... ${name}

    5.destruring解构赋值

    从数组和object取值,对变量进行赋值
    const {body}=ctx.request;

    6.浅拷贝

    js在传参,除了object,都是拷贝值传递
    object也是拷贝值

    const foo =(a)=>{
      a={name:'Tifa'};
      return a;
      
    };
    
    const a={name:'Alice'};
    const b=a;
    b.name='Bob';
    const c=foo(a);
    
    console.log(a);//Bob=>浅拷贝
    console.log(b);//Bob=>浅拷贝
    console.log(c);//Tifa=>浅拷贝
    
    const foo =(a)=>{
      a.name='Tifa';
      return a;
      
    };
    
    const a={name:'Alice'};
    const b=a;
    b.name='Bob';
    const c=foo(a);
    
    console.log(a);//Tifa
    console.log(b);//Tifa
    console.log(c);//Tifa
    

    Immutable
    在面向对象及函数编程中,不可变对象是一种对象,在被创造之后,它的 状态就不可以被改变

    通过拷贝 实现

    const getFruit=(arr)=>{
      const fruit = Array.from(arr).pop();//不会改变arr对象的值
      return fruit;
    }
    const getStudentWIthFormatScore = (student)=>{
      const newStudent = Object.assign({},student);
      newStudent.score=...
      return newStudent;
    }
    

    Immutable:

    const obj = {name:'Alice'};
    const obj1 = {...obj};//=Object.assign({},obj)
    
    //[...newArrName]
    //{...newObjectName}
    

    相关文章

      网友评论

          本文标题:ES6 特性

          本文链接:https://www.haomeiwen.com/subject/giauohtx.html