古人已用三冬足,年少今开万卷余。这篇文章主要讲述call apply bind相关的知识,希望能为你提供帮助。
在javascript中,call
、apply
和bind
是Function
对象自带的三个方法,这三个方法的主要作用是改变函数中的this
指向。
call
、apply
、bind
方法的共同点和区别:apply
、
call
、bind
三者都是用来改变函数的this对象的指向的;
apply
、
call
、bind
三者第一个参数都是this要指向的对象,也就是想指定的上下文(函数的每次调用都会拥有一个特殊值——本次调用的上下文(context)——这就是this
关键字的值。);
apply
、
call
、bind
三者都可以利用后续参数传参;
bind
是返回对应函数,便于稍后调用;apply
、call
则是立即调用 。
apply和call作用完全一样,只是接受参数的方式不同,call是一个接一个,apply是数组形式(如果不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError)
a.call(thisObj,arg1,arg2...)
a代表一个方法
【call apply bind】thisObj
的取值有以下4种情况:
(1) 不传,或者传null,undefined, 函数中的this指向window对象
(2) 传递另一个函数的函数名,函数中的this指向这个函数的引用
(3) 传递字符串、数值或布尔类型等基础类型,函数中的this指向其对应的包装对象,如 String、Number、Boolean
(4) 传递一个对象,函数中的this指向这个对象
a.call();
//window
a.call(null);
//window
a.call(undefined);
//window
a.call(1);
//Number
a.call(‘‘);
//String
a.call(true);
//Boolean
a.call(b);
//function b(){}
a.call(c);
//Object
bind是ES5新增的方法
bind方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入
bind()
方法的第一个参数作为
this
,传入
bind()
方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。
注意:bind
方法的返回值是函数
调用方式
a.bing(thisObj,arg1,arg2...)()等价于var fun = a,bind(thisObj,arg1,arg2...);
fun();
推荐阅读
- Headless Android开发板的调试及远程显示和控制
- HBuilder打包App方法
- 单页面跳转添加返回和跳转动画(仿app) 只对单页面和跳转有用,我用的是angualr,有不会的可以私信问我。
- 2.android
- Android 如何使edittext默认失去焦点
- springboot之配置文件application
- 取代Android(聊聊谷歌的Fuchsia新操作系统)
- android studio 2.3.3 最新 中文 汉化包 韩梦飞沙 安卓工作室 美化包
- Android使用Firebase