JavaScript基础知识——apply、call、bind

JavaScript中的所有函数都有三个神奇的方法,它们是apply()、call()、bind()。下面来讲讲它们有什么用。

一、apply() 和 call()

call() 方法和 apply() 方法的作用相同,都是在特定的作用域中调用函数,实际上等于设置函数体内 this 对象的值。他们的区别在于接收的参数不同。

  1. apply()方法:接收的第一个参数是对象,即作用域;第二个参数可以是一个参数数组,也可以是一个arguments对象;
  2. call()方法:接收的第一个参数是对象,即作用域,这是和apply()方法一样的;但是后面的参数就不一样了,call()方法接收逐个列举出来的参数,而不是参数数组或者arguments对象。

call()方法和apply()方法的用武之地在于扩充函数赖以运行的作用域。使用call()或apply()来扩充作用域的最大好处,就是对象不需要与方法有任何耦合关系。如下面的例子中,obj对象不需要定义sayColor()方法,也可以调用sayColor()方法。

var color = "red";
var obj = {
   color:"blue"
}
function sayColor(){
    console.log(this.color);
}
sayColor();//red
sayColor.call(obj);//blue

PS. 因为 apply() 方法可以接收一个数组作为参数,所以 apply() 方法可以有这样的妙用:ECMAScript拥有一个Math对象,Math对象提供了很多数学计算的方法,其中有两个比较大小的方法,max() 和 min();直接使用 max() 或者 min() 方法,需要将要比较的数字一个一个全部传入函数,而使用 apply() 只需传入一个数组即可,如下:

var numbers = [1,2,3,4,5,6,7,8,9,10];
var max = Math.max.apply(Math,numbers);
console.log(max);//10

二、bind() 方法

与 apply() 和 call() 不同,bind() 方法只接收一个参数,即一个对象,并且 bind() 方法的返回值是一个函数,如下:

function sayColor(){
 return this.color; 
}
var obj = {};
var sayColor2 = sayColor.bind(obj);
console.log(sayColor2 instanceof Function);//true

bind() 方法的作用是将这个返回的函数与传入的对象绑定,不论在任何运行环境中调用这个返回的函数(sayColor2),其this对象永远指向绑定的那个对象(这里是obj)。如下面的例子,即使在全局环境中调用函数 sayColor2(),函数返回的依然是 obj 对象的属性 color:

function sayColor(){
  return this.color; 
}
var color = "red";
var obj = {
    color:"blue"
};
var sayColor2 = sayColor.bind(obj);
console.log(sayColor2());//blue
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值