call,apply,bind的的区别和用法

区别

三者的相同点都是改变this的指向

1.call和apply的区别

call:调用一个对象的一个方法,用另一个对象替换当前对象。

第一个参数是this要指向的对象,后面传入的是参数列表,参数可以是任意类型,当第一个参数为null、undefined的时候,默认指向window;

例如:B.call(A, args1,args2);即A对象调用B对象的方法。

apply:调用一个对象的一个方法,用另一个对象替换当前对象。
第一个参数是this要指向的对象,第二个参数是数组


例如:B.apply(A, arguments);即A对象应用B对象的方法。
//例子
var obj = {}
function f(a,b){
console.log(a,b)
console.log(this) //this是指obj
}
f.apply(obj,[1,2]) 
f.call(obj,1,2) 

call()和bind()的区别:

相同点:都是用来改变this的指向
不同点:call()改过this的指向后,会再执行函数,bind()改过this后,不执行函数,会返回一个绑定新this的函数

function fn(){
console.log("我被调用了");
console.log(this) //指向this
}
var obj = {};
fn.call(obj) //直接调用函数
var stu = fn.bind(obj); //bind不能调用函数
stu();  //现在才可以调用函数
var name = '小张',
            age =25;
        var obj ={
            name:'小刘',
            objAge:this.age,
            sayhai: function(x,y){
                console.log(this.name+"年龄"+this.age,'来自'+ x +'去' + y);
            }
        }
        var lala ={
            name: "亚索",
            age:18
        }

        obj.sayhai.call(lala,'LOL','上路') //亚索年龄18 来自LOL,去上路
        obj.sayhai.apply(lala,['LOL','下路']) // 亚索年龄18 来自LOL,去下路
        obj.sayhai.bind(lala,'LOL','辅助')()  //亚索年龄18 来自LOL,去往辅助
        obj.sayhai.bind(lala,['LOL','上路'])()  //亚索年龄18 来自LOL,上路去undefined

call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数有差别:
call的第一个参数是直接放进去的,后面的参数全都用逗号分隔,直接放到后面
apply的所有参数都必须放在一个数组里面传进去
bind除了返回是函数以外,它 的参数和call 一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值