函数中.call/.bind/.apply三者的区别

本文详细解释了JavaScript中call、apply及bind三个方法的作用及区别,通过实例演示了如何使用这三个方法来改变函数内部this的指向,并展示了它们在参数传递方面的不同。

首先说明call / apply / bind 三者的相同点
1.都是改变函数的this对象的指向;
2.传入参数都可以是多个,第一个是this所要指向的对象

接下来 举一个例子简单说明一下三者的不同

var sun = {
        name: "sun",
        say: function (home) {
            console.log(this.name + ',' + home);
        }
    }
    var jay = {
        name: "jay"
    }
    sun.say("China");

很容易知道结果就是 sun,China
那么如何用xw的say方法来显示xh的数据呢。
对于call可以这样:
sun.say.call(jay);

对于apply可以这样:
sun.say.apply(jay);

而对于bind来说需要这样:
sun.say.bind(jay)();

如果直接写sun.say.bind(jay)是不会有任何结果的,看到区别了吗?call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,因此后面还需要()来进行调用才可以。
那么call和apply有什么区别呢
我们看到上面的例子中sun 的say 方法里有一个 “home”参数
那么,就是三者后续参数的传入有所区别
对于call来说是这样的
sun.say.call(jay,”youdo”);

而对于apply来说是这样的
sun.say.apply(jay,[“youdo”]);

看到区别了吗,call后面的参数与say方法中是一一对应的,而apply的第二个参数是一个数组,数组中的元素是和say方法中一一对应的,这就是两者最大的区别。
那么bind怎么传参呢?它可以像call那样传参。
sun.say.bind(jay,”youdo”);

但是由于bind返回的仍然是一个函数,所以我们还可以在调用的时候再进行传参。

sun.say.bind(jay,”youdo”)();

可以知道,三者结果都是 jay, yudou

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值