apply ,call于bind的区别

apply,call,bind的相同的点是都可以改变this的指向

var obj = {
            name: "张三",
            say: function ( str1,str2) {
                console.log(this.name+''+str1+''+str2);
            }
        }
obj.say("早","你好")//张三 你好  这里的this这的是obj这个对象;
obj.say.call({name:"李四"},"早","你好")// 李四 你好  这里的this改成了对象{name:"李四"};
obj.say.apply({name: "王五"},["早","你好"])//王五 你好  这里的this改成了对象{name:"王五"};
obj.say.bind({name: "李六"},"早"",你好")();//李六 你好  这里的this改成了对象{name:"李六"};

这里可以看出,call,apply以及bind都可以把原来的this指向的obj这个对象换为了括号中的这个对象

但是他们也是存在区别的:

1.call,apply以及bind括号中的参数第一个都是this的指向;

2.call后面的参数是调用的函数要传的参数;他和函数中的形参一一对应;

3.apply中的要传给函数的参数要以数组的形式传入;

4.call和apply在改变方法的this指向时,会同时执行方法;而bind不会执行方法,而是返回改变this指向后的新方法,所以bind需要二次调用来返回值,所以后面要加()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值