【JS】详解bind,call和apply的区别

首先这三个方法都可以改变this的指向,下面从用法上来说一下他们的不同点

一.bind

var name = 'sally';
 
function sayName(){
    return this.name;
}
function sayName2(){
    return this.name
}
 
var o = {
    'name':'John',
    sayName:sayName,
    sayName2:sayName2.bind(window)
};
console.log(o.sayName()); //John
console.log(o.sayName2());//sally  

结果看来很明显,两个方法都是o对象来调用的,在不使用bind改变this指向空间时,两个均为John,但由于bind的特殊作用,将其指向绑定为window的,因为最后一个输出了全局变量的name;

二.call和apply

相同点:call和apply均可以改变this指向,

不同点:call接受的参数为一个一个的,但是apply接受的参数只能为一个严格的数组(详情见如下的代码演示)

var name = 'sally';
function sayName(){
    return this.name;
}
var o = {
    'name':'John',
    sayName:sayName
};
console.log(sayName());

结果为:sally    因为此时this所指对象为window

下面把代码改变一下

    var name = 'sally';
    function sayName(){
        return this.name;
    }
    var o = {
        'name':'John',
        sayName:sayName
    };
    
  console.log(sayName.call(o));
  console.log(sayName.apply(o));
  结果为:John 因为此时this所指对象为 o

下面看一下他们的不同点,上面也解释过,直接上代码看一下

  // call接收参数的形式
  
    var name = 'sally';
    function sayName(){
        console.log (this.name,arguments)
    }
    sayName.call(o,1,2,3);

  // apply接收参数的形式
  
    var name = 'sally';
    function sayName(){
        console.log (this.name,arguments)
    }
    sayName.apply(o,[1,2,3]);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值