JavaScript中 call 与 apply、bind 的使用

今天遇到一道关于call与apply使用的题目,在此总结一下关于 call 与 apply 的使用方法。

题目如下:以下程序执行结果为3的选项是?

var a = {X:1,Y:2};
var b = {
    X:2,
    Y:2,
    add:function(){
        return this.X+ this.Y;
    }
};

console.log(b.add.call(a));      //3
console.log(b.add.apply(a));     //3
console.log(b.excute('1+3'));    //报错
console.log(b.add.bind(a));      //返回函数

题目解析:

  • console.log(b.add.call(a));

    通过call(obj)方法将对象b的add方法添加到对象a下。此时a对象为:
    var a = {
    X:2,
    Y:2,
    add:function(){
    return this.X+ this.Y;
    }
    };
    因此,很好理解执行结果为3了。

  • console.log(b.add.apply(a));

    在此时与以上方法相同,它们的区别写在后面。

  • console.log(b.excute(‘1+3’));

    对象b下没有excute这个方法,则报错。

  • console.log(b.add.bind(a));

    此方法将b.add()方法绑定在a下,相当于为a添加了add()方法,但是不是真的复制,执行a.add()也会显示在对象a下找不到add方法。要想显示结果3,可修改为console.log(b.add.bind(a)())。

call 与 apply 方法解读
call 与 apply 都存在于这样的环境下,对象a想要使用对象b中方法,自己比较懒,不想再新建,就出现了call和apply方法,直接使用对象b的方法。

  • 定义:
    调用一个对象的一个方法,以另一个对象替换当前对象。

  • 区别
    根据方法格式就可以看出区别啦!
    call([thisObj[,arg1[, arg2[,[,.argN]]]]]);
    apply([thisObj[,argArray]]);

    区别在于 apply的第二个参数必须是数组或者arguments(参数数组)。call 的第二个参数可以是任意类型,如果为方法传递多个参数,call方法必须逐个制定参数。
    3.说明
    在call 方法中,如果没有提供 thisObj 参数,那么全局对象被用作 thisObj。
    在apply方法中,如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。 如果没有提供 argArray 和 thisObj 任何一个参数,那么 全局对象将被用作 thisObj, 并且无法被传递任何参数。
    4.bind()方法
    看到一篇总结的比较好的文章,点开了解详细信息吧!Javascript中bind()方法的使用与实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值