箭头函数总结

Posted iiiLISA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了箭头函数总结相关的知识,希望对你有一定的参考价值。

箭头函数的特点:
1、箭头函数没有this,如果在箭头函数内部使用this,则this指向函数被定义时所在的作用域所指向的this;
2、不能作为构造函数
3、不能使用new操作符调用
4、没有prototype属性
5、不能使用call、apply、bind去改变this的指向(因为箭头函数没有this)
6、没有属于自己的arguments、super、new.target

不使用箭头函数的情况
1、对象的方法中不使用箭头函数
2、原型链中不使用箭头函数
3、构造函数不能使用箭头函数(原因见注)

注:构造函数通过new字符串生成对象实例
new操作符做的事:
(1)创建了一个新的对象obj
(2)new创建的对象指向了构造函数的原型对象:子对象.proto=父函数.prototype
(3)将构造函数中的this绑定到新建的对象obj上
(4)根据构造类型的返回类型做判断,如果是原始值则被忽略,如果是返回对象,需要正常处理。

附:
prototype与__proto__的区别
1.prototype是函数独有的,而__proto__是每个对象都会拥有的(包括函数)
2.prototype的作用是保存所有实例公共的属性和方法;__proto__的作用是当访问一个对象的属性时,如果内部没有该属性,就会在它的__proto__属性所指的那个父对象去找,父对象没有,再去父对象的父对象里找…直到null,即原型链.
3.s.proto === Student.prototype
prototype还有一个constructor属性,指向该对象的构造函数本身.

function Foo() 
        setTimeout( () => 
            console.log(this.id);
        , 100);
        
        var id = 21;
        var obj =  id: 42 
        Foo();  //21,this指向window
        Foo.call(obj);  //42,this指向对象obj



        // var Foo1 = () => ;
        // var foo1 = new Foo1();  // TypeError: Foo1 is not a constructor



        //对象的方法中不使用箭头函数
        var name1='李峋';
        const obj1 = 
            name1: 'syvia',
            getName() 
                return this.name1;
            ,
            getName1: () => 
                return this.name1;
            
        
        console.log('普通函数',obj1.getName());//syvia
        console.log('箭头函数',obj1.getName1());//李峋
 


        // 原型方法中不使用箭头函数
        const obj2=
            name2:'李峋'
        ;
        var name2='朱韵';
        obj2.__proto__.getName=function()
            return this.name2;
        ;
        obj2.__proto__.getName1=()=>
            return this.name2;//指向window
        
        console.log(obj2.getName());//李峋
        console.log(obj2.getName1());//朱韵



        /**
         * 使用 let 在全局作用域中声明的变量不会成为 window 对象的属性,
         * var 声明的变量则会(不过,let 声明仍然是在全局作用域中发生的,
         * 相应变量会在页面的生命周期内存续,所以使用window访问会为undefined):
         * 
        */
        let num = 11; //换成var num=11;则输出11
        const obj4 = 
            num: 22,
            fn1: () => 
                let num = 33;
                const obj5 = 
                    num: 44,
                    fn2: () => 
                        console.log(this.num);
                    
                
                obj5.fn2();
            
        
        obj4.fn1();//undefined



        /**箭头函数不能使用arguments参数
         * 但是可以包装在普通函数中传给箭头函数**/
        let sum = function()
            return arguments.length;
        
        var len=sum(1,2,3);
        console.log(len);//3

        let foo2=function()
            let bar=()=>
                console.log(arguments.length);
            
            bar();
        ;
        foo2(5,5,5,6);//4
        foo2.bar(34,2);//传给bar是错误的。

        let sum1=()=>
            return arguments.length;
        
        var len1=sum1(1,2);
        console.log(len1);//Uncaught ReferenceError: arguments is not defined at sum1

很好的借鉴:https://www.jianshu.com/p/e3e4f2d64aeb

以上是关于箭头函数总结的主要内容,如果未能解决你的问题,请参考以下文章

箭头函数总结

css 方向 箭头

Vue ES6箭头函数使用总结

怎么在chrome调试工具直接修改js代码?

C语言怎么调颜色??

vue 使用技巧总结 19.01