JS 基础篇(三) call apply bind 区别

call apply bind的使用

const obj = {
	name:'obj name'
}
function getName(para1,para2){
	return this.name + '-'+para1+'-'+para2
}
//call 的使用
console.log(getName.call(obj,'form','call'))
//apply 的使用
console.log(getName.apply(obj,['form','call']))
//bind 的使用
var b = getName.bind(obj)
console.log(b('from','bind'))

call apply bind 的区别

相同点:都能够改变this指向
不同点:
a) call apply在使用的时候会触发运行一次,而bind只是绑定了函数,不会立即执行
b) call 与 apply 传参不同:call可以多参数;apply 是一个arguments
c) call、apply因为要立即执行函数,所以第二个参数或之后的参数都是当前的真实参数,bind是“预设参数”

应用场景

  1. 求数组最大值
    call实现

    var arr = [1, 2, 3, 89, 46]
    var max = Math.max.call(null, arr[0], arr[1], arr[2], arr[3], arr[4])//89
    

    注意

    call 方法第一个参数是要绑定给this的值,后面传入的是一个参数列表。
    当第一个参数为null、undefined的时候,默认指向window。
    

    apply 实现

    var arr = [1,2,3,89,46]
    var max = Math.max.apply(null,arr)//89
    
  2. 用于继承
    请看JS 基础篇(五)继承方法总结

  3. 数组追加
    apply实现

    //这里使用apply,它可以传递数组
    var arr1 = [1,2,3];
    var arr2 = [4,5,6];
    var total = [].push.apply(arr1, arr2);//6
    // arr1 [1, 2, 3, 4, 5, 6]
    // arr2 [4,5,6]
    
  4. 判断变量类型

    function isArray(obj){
    return Object.prototype.toString.call(obj) == '[Ojbect Array]'
    }
    isArray([]) //true
    isArray('kk') //false
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值