您的位置:首页 > 移动开发

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

2017-08-18 00:00 513 查看
今天重温了下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()绑定指定参数对象后生成一个函数副本等待调用,并非立即调用函数

四、最后

这是我在开源中国写的第一篇博客,用以记载在学习过程中自认为一时半会难以掌握的知识点。文中有不足之处还请各位大侠提出,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息