js三种改变this指向的方法call、apply、bind及区别

call()方法

1、第一个作用可以调用函数,第二个可以改变函数内this的指向
2、call 主要作用可以实现继承

 var o = {
            name: "andy"
        }

        function fn(a, b) {
            console.log(this); //指向 对象o
            console.log(a + b);

        };
        fn.call(o, 1, 2);

实现子类对父类的继承

  function Father(uname, age, sex) {
            this.uname = uname;
            this.age = age;
            this.sex = sex;
        }

        function Son(uname, age, sex) {
            Father.call(this, uname, age, sex) //父类构造函数调用了子类的this

        }
        var son = new Son("刘德华", 18, "男");
        console.log(son);
apply()方法

1、第一个作用可以调用函数,第二个可以改变函数内this指向
2、第二个参数必须是数组

比如可以利用apply方法借助于数学内置对象求数组最大值

      var arr = [1, 66, 22, 10];
        var arr1 = ["red", "pink"];
        var max = Math.max.apply(Math, arr);
        var min = Math.min.apply(Math, arr);
        console.log(max, min);
bind()方法

1、不会调用原来的函数,可以改变this指向
2、返回的是原函数改变this之后产生的函数
3、如果有的函数我们不需要立即调用
4、当我们击了之后,就禁用这个按钮,3秒之后再开启

     var btns = document.querySelectorAll("button");
        for (var i = 0; i < btns.length; i++) {
            btns[i].onclick = function() {
                this.disabled = true;
                setTimeout(function() {
                        this.disabled = false;
                    }.bind(this), 2000) //bind 里面的this指向的是btn
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值