2021-07-06

this指向问题

全局函数中调用this: this指向window

在对象的方法中调用this: this指向调用者。 a.b.c.fn() 调用者是c 看函数名前面的是谁。

事件处理函数中的this:this指向事件源

定时器(setTimeout setInterval)函数中的this:this指向window

    <style>
        div {
            width: 300px;
            height: 300px;
            margin: 0 auto;
            background-color: brown;
        }
    </style>
    <body>
     <div id="box">
        <button>按钮</button>
     </div>
   </body>
   <script>
    // function fn() {
    //     console.log(this); //this指向window
    // }
    // fn();

    // var obj = {
    //         name: "zhangsan",
    //         say: function() {
    //             console.log(this); // this指向调用者。
    //         }
    //     }
    //     // obj.say()

    // var a = {
    //     b: {
    //         name: "lisi",
    //         c: {
    //             name: "wangwu",
    //             say: function() {
    //                 console.log(this.name);
    //             }
    //         }
    //     },
    //     name: "zhangsan"
    // }
   // a.b.c.say();//a.b.c.fn() 调用者是c  看函数名前面的是谁

    box.onclick = function(event) {
        //this指向事件源
        console.log(this);
        //target 事件触发对象
        console.log(event.target);
    }
    setTimeout(function() {
        console.log(this);
    }, 1000)
   </script>

修改this指向的方法

apply()使用格式:

函数名.apply(this指向的对象,原函数的参数数组)
【注意】 apply会让原函数立即执行。 apply第二个参数是一个数组。

call()

使用格式: 函数名.call(this指向的对象,原函数的参数列表…)
【注意】call()也会让原函数立即执行,call方法从第二个参数开始,传入的参数是原函数的参数。

bind()

使用格式: 函数名 = 函数名.bind(this指向的对象,参数列表…)
会返回一个新的函数,这个函数的内容与原函数一模一样。但是里面的this指向已经被修改了。
【注意】bind函数不会立即执行。

apply call bind 这三种方法的区别

面试经常遇到此题
1.apply call 方法会立即执行,而bind方法会返回一个新的函数,函数中的this以及被修改了。
2.apply 和 call方法的区别就在于 传参的形式不同,apply的参数是一个数组。 call和bind方法都是从第二个参数开始为原函数的参数列表。

<script>
    var obj = {
        name: "zhangsan"
    }
    var obj2 = {
        name: "lisi"
    }

    function show(x, y) {
        console.log(x, y);
        console.log(this);
    }
    show.apply(obj2);
    show.call(obj, 10, 20);
    show = show.bind(obj, 10, 20);
    show();
</script>
weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值