• 箭头函数


    箭头函数这样写可以返回对象{ foo: x }:

    x => ({ foo: x })

     箭头函数内部的this是词法作用域,由上下文确定,即在定义的时候就确定了它得this指向,而不是在调用它的时候。箭头函数只会从自己的父作用域里继承this,和谁调用的没有关系:

    let a = {
      foo: 1,
      bar: () => console.log(this.foo)   // 此时的this指向Window
    }
    
    a.bar()  // undefined
    function A() {
      this.foo = 1
    }
    
    A.prototype.bar = () => console.log(this.foo)   // 此时this指向Window
    
    let a = new A()
    a.bar()  //undefined

    通过call()、apply()或bind()方法调用一个箭头函数时,只能传递参数,不能绑定this,他们的第一个参数会被忽略。

    箭头函数不绑定arguments:

    var a= (c, d) => {
        console.log(arguments)
    }
    a(1,2)   // Uncaught ReferenceError: arguments is not defined

    可以用剩余参数获得传过来的不定数量的参数:

    var a= (...v) => {
        console.log(v)
    }
    a(1,2)   // [1, 2]

    普通函数都有prototype属性,但是箭头函数没有prototype属性。

    箭头函数不能用作构造器,和 new一起用会抛出错误。

    var Foo = () => {};
    var foo = new Foo(); // TypeError: Foo is not a constructor

    虽然箭头函数中的箭头不是运算符,但箭头函数具有与常规函数不同的特殊运算符优先级解析规则:

    let callback;
    callback = callback || function() {}; // ok
    callback = callback || () => {};      // SyntaxError: invalid arrow-function arguments
    callback = callback || (() => {});    // ok

    箭头函数不能作为Generator函数,不能使用yield关键字。

    箭头函数在ES6的class中声明的方法为当前实例方法,不是该实例上原型的方法:

    //deom1
    class Super{
        sayName(){
            //do some thing here
        }
    }
    //通过Super.prototype可以访问到sayName方法,这种形式定义的方法,都是定义在prototype上
    var a = new Super()
    var b = new Super()
    a.sayName === b.sayName //true  所有实例化之后的对象共享prototypy上的sayName方法
    
    
    //demo2
    class Super{
        sayName =()=>{
            //do some thing here
        }
    }
    //通过Super.prototype访问不到sayName方法,该方法没有定义在prototype上
    var a = new Super()
    var b = new Super()
    a.sayName === b.sayName //false  实例化之后的对象各自拥有自己的sayName方法,a的sayName和b的sayName拥有不同的内存空间,他们的引用地址不一样。
  • 相关阅读:
    base加密解密工具类
    根据银行卡号判断所属银行(部分资源网上抄录)
    input autocomplete属性设计输入框自动联想(php实现)
    XFire+Spring构建Web Service经验总结
    php学习手记(持续更新)
    ios上遇到的坑(持续更新)
    随笔
    HTML5微信长按图片不会弹出菜单的解决方法
    能在编辑器里面写出的字符
    css文本两端对齐,分散对齐
  • 原文地址:https://www.cnblogs.com/xjy20170907/p/11424196.html
Copyright © 2020-2023  润新知