call和apply和bind的区别
在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向。
JavaScript 的一大特点是,函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」。
function.apply(thisobj, args) 或者 function.apply(thisobj, args)
1、thisobj是调用function的对象,函数体内thisobj为this,如果参数为null则使用全局对象
2、返回调用函数function的返回值
bind(): 主要作用:将函数绑定到一个对象,返回一个新函数,通过可选的指定参数,作为指定对象的方法调用该方法
1、A要绑定在函数上的对象
2、args...要绑定在函数上的零个或者是多个函数值
3、返回一个新函数,该函数会当做A的方法调用,并向它传入args参数
bind是ES5新增的一个方法
传参和call或apply类似
不会执行对应的函数,call或apply会自动执行对应的函数
返回对函数的引用
call(): 类似apply,将函数作为指定对象的方法来调用,传递给它的是指定参数
function.call(thisobj, args.....)
1、thisobj是调用function的对象,函数体内thisobj为this,如果参数为null则使用全局对象
2、返回调用函数function的返回值
apply与call的区别:
<script>
function print(a,b,c,d){
alert(a + b + c + d);
}
function example(a,b,c,d){
//当参数很明确,一般使用call
print.call(this,a,b,c,d);
//封装成数组
print.apply(this,[a,b,c,d])
//javascript方法本身有的arguments数组,当参数不明确的时候可以用apply结合arguments
print.apply(this,arguments)
}
example("心","想","事","成")
</script>
var func = function(arg1, arg2) {
};
就可以通过如下方式来调用:
func.call(this, arg1, arg2);
func.apply(this, [arg1, arg2])
三者区别demo:
<script type="text/javascript">
var obj = {
num: 888,
};
var foo = {
getNum: function() {
return this.num;
}
}
console.log(foo.getNum.bind(obj)()); //
console.log(foo.getNum.call(obj)); //
console.log(foo.getNum.apply(obj)); //
//apply 、 call 、bind 三者都是用来改变函数的this对象的指向的;
//apply 、 call 、bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文;
//apply 、 call 、bind 三者都可以利用后续参数传参;
//bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。
</script>
call和apply和bind的区别的更多相关文章
- JS 中的this指向问题和call、apply、bind的区别
this的指向问题 一般情况下this对象指向调用函数的对象,全局环境中执行函数this对象指向window. function a(){ console.log(this); //输出函数a中的th ...
- this+call、apply、bind的区别与使用
http://www.ruanyifeng.com/blog/2018/06/javascript-this.html https://segmentfault.com/a/1190000018017 ...
- 改变this指针的apply,call,bind的区别
apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. Jav ...
- js中call、apply和bind的区别
在JS中,这三者都是用来改变函数的this对象的指向的,他们有什么样的区别呢.在说区别之前还是先总结一下三者的相似之处:1.都是用来改变函数的this对象的指向的.2.第一个参数都是this要指向的对 ...
- 有关call和apply、bind的区别及this指向问题
call和apply都是解决this指向问题的方法,唯一的区别是apply传入的参数除了其指定的this对象之外的参数是一个数组,数组中的值会作为参数按照顺序传入到this指定的对象中. bind是解 ...
- Javascript中call,apply,bind的区别
一.探索call方法原理 Function.prototype.call = function(obj) { // 1.让fn中的this指向obj // eval(this.toString().r ...
- JS中call()和apply()以及bind()的区别
一.方法定义: apply:调用一个对象的一个方法,用另一个对象替换当前对象.例如:B.apply(A, arguments);即A对象应用B对象的方法. call:调用一个对象的一个方法,用另一个对 ...
- 超容易理解的call()、apply()、bind()的区别
call().apply().bind()是用来改变this的指向的. 一 举个例子 一个叫喵喵的猫喜欢吃鱼,一个叫汪汪的小狗喜欢啃骨头,用代码实现如下: 有一天,小狗汪汪和喵喵共进午餐的时候,汪汪说 ...
- apply,all,bind的区别
这三个都是用来改变this指向的 call() 和apply()的第一个参数相同,就是指定的对象.这个对象就是该函数的执行上下文.call()和apply()的区别就在于,两者接收的参数不一样.cal ...
随机推荐
- iOS开发——高级篇——iOS涂鸦画板效果实现
一个简单的绘图应用,模仿苹果自带软件备忘录里的涂鸦功能 核心代码 #import "DrawView.h" #import "DrawPath.h" @inte ...
- apache配置访问限制
1.禁止访问某些文件/目录 增加Files选项来控制,比如要不允许访问 .txt扩展名的文件,保护php类库: <Files ~ "\.txt$"> Order all ...
- 网络编程-获取ip-解析ip
import java.net.InetAddress; import java.net.UnknownHostException; /** * 查询ip地址 * * @author chengluc ...
- Java正则表达式的用法
/** * 校验时间格式,正确则返回true * @param xxx * @return */ private static boolean checkDateFormat (String xxx) ...
- [Codeforces 507E] Breaking Good
[题目链接] https://codeforces.com/contest/507/problem/E [算法] 首先BFS求出1到其余点的最短路 , N到其余点的最短路,记为distA[]和dist ...
- Jquery选择器大全、属性操作、css操作、文档、事件等
一.简介 定义 jQuery创始人是美国John Resig,是优秀的Javascript框架: jQuery是一个轻量级.快速简洁的javaScript库. jQuery对象 jQuery产 ...
- join示例分析
join示例分析 public class TestJoin { public static void main(String[] args) throws InterruptedException ...
- E20180205-hm
insensitive adj. 不敏感的; 感觉迟钝的; (对某事物) 无感觉的; (对变化) 懵然不知的; occurence 出现,发生; capital n. 资本; 首都; 资源; 大写字 ...
- 51nod 1122 机器人走方格 V4 【矩阵快速幂】
首先建立矩阵,给每个格子编号,然后在4*4的格子中把能一步走到的格子置为1,然后乘n次即可,这里要用到矩阵快速幂 #include<iostream> #include<cstdio ...
- LuoguP1948 电话线 【二分答案/图论】
其实是和奥格瑞玛一样的题啦. 但还是想了很久后看了题解. 多年以后,笨笨长大了,成为了电话线布置师.由于地震使得某市的电话线全部损坏,笨笨是负责接到震中市的负责人.该市周围分布着N(1<=N&l ...