4小时快速掌握ES6核心用法 - 1.6 箭头函数this指向和注意事项

1.6 箭头函数this指向和注意事项

箭头函数没有this绑定,没有this指向,箭头函数内部this值只能通过查找作用域链来确定,一旦使用箭头函数,当前就不存在作用域。
js犯错最多的就是函数中this的绑定,由于函数内部的this值能被改变,这取决于调用该函数的上下文对象

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>1.6 箭头函数this指向和注意事项</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <!-- <link href="css/style.css" rel="stylesheet"> -->
    </head>
    <body>
        <script>
            // 箭头函数没有this绑定,没有this指向,箭头函数内部this值只能通过查找作用域链来确定,一旦使用箭头函数,当前就不存在作用域。
            // js犯错最多的就是函数中this的绑定,由于函数内部的this值能被改变,这取决于调用该函数的上下文对象

            /*  let PageHandler = {
                id:123,
                init:function(){
                    document.addEventListener('click',function(event) {
                        this.doSomeThings(event.type);
                    },false);
                },
                doSomeThings:function(type){
                    console.log(`事件类型:${type},当前id:${this.id}`);
                }
            }
            PageHandler.init(); */

            /*  let PageHandler = {
                id: 123,
                init: function () {
                    // 使用bind来改变内部函数this的指向
                    document.addEventListener('click', function (event) {
                        this.doSomeThings(event.type);
                    }.bind(this), false);
                },
                doSomeThings: function (type) {
                    console.log(`事件类型:${type},当前id:${this.id}`);
                }
            }
            PageHandler.init(); */
            let PageHandler = {
                id: 123,
                init: function () {
                    // 箭头函数没有this的指向,箭头函数内部的this值只能通过查找作用域链来确定

                    // 如果箭头函数被一个非箭头函数所包括,那么this的值与该函数的所属对象相等,否则 则是全局的window对象
                    document.addEventListener('click', (event) => {
                        console.log(this);  // 输出:{id: 123, init: ƒ, doSomeThings: ƒ}

                        this.doSomeThings(event.type);
                    }, false);
                },
                doSomeThings: function (type) {
                    console.log(`事件类型:${type},当前id:${this.id}`);  // 输出:事件类型:click,当前id:123
                }
            }
            PageHandler.init();

            // 1、箭头函数的注意事项
            //箭头函数中没有arguments对象   
            /* var getVal = (a,b) => {
                
                // console.log(arguments);
                
                return a + b;
            }
            console.log(getVal(1,2)); */

            // 2.箭头函数不能使用new关键字来实例化对象
            // function函数也是一个对象,但是箭头函数不是一个对象,它其实就是一个语法糖。
            /* let Person = ()=>{}
            var p1 = new Person(); */
        </script>
    </body>
</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值