美文网首页
ES6日常使用(精简版)

ES6日常使用(精简版)

作者: 尤小小 | 来源:发表于2019-02-19 15:12 被阅读0次

    基础指令:let const

    使用let定义变量,来代替之前的var,let有块级作用域,在使用let时需要注意,let不可以重复定义,否则会报错。

    let a = 'xiao'
    let a = 'hei'
    

    let 重复定义变量的报错:

    Uncaught SyntaxError: Identifier 'a' has already been declared
    

    const 用于定义常量,且该常量不可再次赋值,

    const b = 'heihei'
    b = 'xiaohei'
    

    const再次赋值的报错:

    VM266:2 Uncaught TypeError: Assignment to constant variable.
    

    let const 的解构赋值,已经定义了常量c,在解构赋值的时候,需要obj里的c, 但是c不可以再次赋值了否则会报错,这里可以通过,对obj里的对象c重新命名,来解决这个问题。

    const c = 'hei'
    const {c: d, e, f} = obj; // 当前定义了常量,
    

    箭头函数:value => return value + 1

    箭头函数可以表达式赋值,可以写普通的函数,但是不可用于构造函数,并且箭头函数没有prototype。

    function Animal() {
      this.name = name;
    }
    
    let animal = new Animal()
    

    模版字符串:``Hello ${name}`

    模版字符串可以用嵌套变量、函数、以及可以实现循环嵌套

    注意循环嵌套的写法,在${} 里写map循环,map循环可以写箭头函数,

    function temp() {
      return 'heihei'
    }
    let tempStr = `${temp()}`;
    console.log(tempStr); // heihei
    
    // 循环嵌套
    let names = ['hei', 'bie', 'bao'];
    let str  = `
    ${
      names.map(name => `<li>${name}</li>`).join('')
    }
    `;
    console.log(str); // <li>hei</li><li>bie</li><li>bao</li>
    

    promise:Promise resolve reject then

    promise 是为了解决异步层层嵌套的问题,衍生的一种解决方案。在promise中有 三个概念,分别是:resolve, reject, then, resolve请求成功执行的函数,reject请求失败执行的函数,then的链式调用用法。

    let promiseA = new Promise(() => {
      
    })
    
    let promiseB = new Promise(() => {
      
    })
    
    promiseA.then(()=>{
      return promiseB
    })
    

    面向对象:class, extends, contructor,super,extends

    ES6在面向对象新增了class类语法糖,原理也是通过function实现的。
    在class的使用的过程中需要掌握几个概念contructor,super,extends.

    class Animal {
      constructor(name) {
        this.name = name
      }
      getName () {
        return this.name
      }
    }
    
    let animal = new Animal('test')
    console.log(animal.getName())
    

    如果要实现子类的继承的话,需要使用extends,子类里没有this对象,如果想使用this的话,在子类的构建方法里调用super()。子类继承了父类,子类可以调用父类的方法。

    class Animal {
      constructor() {
        this.name = 'heihei';
      }
      getName () {
        return this.name
      }
    }
    
    class Cat extends Animal {
        constructor() {
            super()
            this.name = 'gaoxiaohei'
        }
    }
    
    let animal = new Animal()
    let cat = new Cat()
    console.log(animal.getName())
    console.log(cat.getName())
    

    es6中对象的扩展用法

    • 变量名可以直接用作对象的属性明
    • 对象里的方法可以简写
    • 表达式可以作为属性名或者方法名
    let name = 'gaobingyan'
    let age = 18
    
    let obj = {
      name,
      age,
      getName() {
        return this.name
      },
      ['get'+'Age']() {
        return this.age
      }
    }
    
     // 以数组的形式返回对象的属性名key
    console.log(Object.keys(obj))
    
    // 以数组的形式返回对象的属性值value
    console.log(Object.values(obj)) 
    
     // 把几个对象做整合,后面的同名属性会把前面的覆盖掉,可以处理浅拷贝
    Object.assign({}, {a: 1})
    

    模块化:export, import, as, default

    ES6模块化是一个比较大的话题,随着业务和项目工程的增大,越来越需要模块的支持,但是没有对应的标准和规范,后来出现来 commonJs 、AMD、CMD模块化规范。commonJS 需要借助node.js打包编译,AMD和CMD都需要额外引入模块加载。

    创建一个module文件夹,在文件夹中创建index.html、index.js、module.js。
    index.html文件:

    <!-- 注意:type是module类型 -->
    <script type="module" src="./index.js"></script> 
    

    index.js文件:

    import {str as string, obj, fn } from './module.js' // 可以通过as的形式 对变量重命名
    import foo from './module.js' // 默认导出的时候 可以对对象重命名
    
    console.log(string) // 对str的重命名后为string 下面的调用就是 string
    console.log(obj) // 默认导出的对象 有点像主站的utils
    console.log(fn) 
    console.log(foo)
    

    module.js文件:

    let str = "string"
    let obj = {
        name: 'heihei'
    }
    let fn = () => {
        console.log('module test')
    }
    
    // 导出多个对象
    export {
        str,
        obj,
        fn 
    }
    
    // 导出默认 类似与utils文件导出的obj对象
    export default { 
        a: 1
    }
    

    相关文章

      网友评论

          本文标题:ES6日常使用(精简版)

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