改变this指向的call-apply-bind的浅显区分

本文介绍了JavaScript中this的四种指向,并详细讲解了如何通过call、apply和bind方法改变this的指向。call和apply都用于立即执行函数,它们的主要区别在于传递参数的方式:call直接传参,apply参数需封装为数组。bind则返回一个新函数,保留指定的this值和参数,供后续调用。
摘要由CSDN通过智能技术生成

一、this的四种指向

二、改变this指向的方法 call() 、apply()、bind()

在JS中,this一般指向的是当前被调用者,但也可以通过其它方式来改变this指向。

显式绑定this:

call()与 apply()
第一个参数都是this要指向的对象(函数执行时,this将指向这个对象),后续参数用来传实参。

 function foo() {
        console.log(this.a);
    }

    var obj = {
        a: 2
    };

    //  this 指向 obj
    foo.apply(obj); //打印结果:2

1、Obj不传或者为null、undefined时,函数中的this会指向window对象(非严格模式)。

2、传递一个别的函数名时,函数中的this将指向这个函数的引用

3、传递的值为数字、布尔值、字符串时,this会指向这些基本类型的包装对象Number、Boolean、String。

4、传递一个对象时,函数中的this则指向传递的这个对象。

当函数调用call()和apply()时,函数都会立即执行
call()和apply()的区别

  var persion1 = {
        name: "小王",
        gender: "男",
        age: 24,
        say: function (school, grade) {
            alert(this.name + " , " + this.gender + " ,今年" + this.age + " ,在" + school + "上" + grade);
        }
    }
    var person2 = {
        name: "小红",
        gender: "女",
        age: 18
    }

通过call的参数进行传参:

persion1.say.call(persion2, "实验小学", "六年级");

通过apply的参数进行传参

persion1.say.apply(persion2, ["实验小学", "六年级"]);

call后面的实参与say方法中是一一对应的,而apply传实参时,要封装成一个数组,数组中的元素是和say方法中一一对应的

bind()

bind()是将函数返回,因此后面还需要加()才能调用。
bind()传参的方式与call()相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值