js中call() apply() bind()的用法及三者区别

今天重温了下js的基础知识,看到对象这块又有点迷糊,借此来记录一下自己的总结。

一、首先看看apply()以及call()的用法:

var numbers = [1,5,9];

   //output:9
var max_apply = Math.max.apply(Math,numbers);

   //output:9
var max_call = Math.max.call(Math,1,5,9);

从代码可以观察到apply的第一个参数为Math,第二个参数为固定长度的数组;

而call的第一个参数也为Math,紧跟着后面可传入多个参数。

总结:apply用于已知函数参数的数量的函数对象绑定,而call用于未知函数参数的数量的函数对象绑定,但这要强调的是apply的第二个参数必须传入一个数组。

二、再来看看bind()的用法

    bind()的作用同样是绑定函数,但它绑定后不会立刻执行,而是返回一个改变了上下文的函数副本,需要对该函数副本进行调用,才能看出bind()指定对象后的作用

var counter = {
	count:0,
	inc:function(){
		this.count++;
	}
}

var func = counter.inc; 
func();
console.log(counter.count); //不绑定对象的情况下 output:0
var counter = {
	count:0,
	inc:function(){
		this.count++;
	}
}

var func = counter.inc.bind(counter);
func();
console.log(counter.count);//绑定的情况下 output:1

三、总结

1.call() apply() bind() 三个方法都是用来绑定对象到函数。

2.call() 、apply()会立刻调用函数,apply()第二个参数只能传入一个数组,call()可传入多个参数。

3.使用bind()绑定指定参数对象后生成一个函数副本等待调用,并非立即调用函数

 

四、最后

    这是我在开源中国写的第一篇博客,用以记载在学习过程中自认为一时半会难以掌握的知识点。文中有不足之处还请各位大侠提出,谢谢!

转载于:https://my.oschina.net/dalsen/blog/1512646

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值