call,bind,apply 使用


// 将伪数组转化为真数组,并且有数组的方法
方式一: Array.prototype.slice.call(arguments)
方式二: [].slice.call(arguments)

// 选出数组中最大值
一般使用: Math.max(10,2,34,89,23) ==》可以得到最大值89
如果使用到数值数组中选出最大值:
方式一: Math.max.apply(null,arrName)
方式二: Math.max(...arrName)

// 合并数组
var a = [1,2,3];
var b = [4,5,6];
[].push.apply(a,b);    // 借用数组的push方法 等价 a.push(4,5,6);
console.log(a);        // [1, 2, 3, 4, 5, 6]

// 使用bind改变函数运行时的上下文时,bind方法返回一个函数,需要再次调用执行
function list() {
  return Array.prototype.slice.call(arguments);  
}
var newList = list.bind(undefined, 37); // 绑定函数
var list = newList(1, 2, 3); // 调用绑定函数

// 作用:
1.改变函数内部this指向
2.都是函数对象的方法,只有函数才可以调用

// 区别:
call,apply会立即执行原函数,bind会在调用到时执行原函数
call第一个参数作为this,第二个参数及后面多个参数作为原函数的参数传入,apply(只有两个参数)第一个参数作为this,第二个参数为一个数组,作为参数传入到原函数的形参中,bind(只有一个参数)即要绑定的this
如果不确定参数的个数则使用call,确定参数个数使用apply

function foo(a,b){
  console.log(a+b);
}
foo.call(null,'海洋','饼干');        // 海洋饼干  这里this指向不重要就写null了
foo.apply(null, ['海洋','饼干'] );   // 海洋饼干
var fun = foo.bind(null);
fun('海洋','饼干');                  // 海洋饼干

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值