JavaScript中的call、apply、bind方法
来源:互联网 发布:正交矩阵的性质 编辑:程序博客网 时间:2024/05/22 12:58
JavaScript中的call()、apply()、bind()方法
在JavaScript中, call()、apply()、bind()是函数对象的方法,主要用于改变函数的调用对象,改变上下文的this。
一、方法参考
call()
语法:function.call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:将函数作为对象的方法调用–调用一个对象的一个方法,以另一个对象替换当前对象。
说明:call()将制定的函数function作为对象thisobj的方法来调用,并传入参数列表中thisobj之后的参数。返回的是调用function的返回值。在函数体内,关键字this指代thisobj对象,如果thisobj为null,则只用全局对象。
apply()
语法:function.apply([thisObj[,argArray]])
定义:将函数作为一个对象的方法调用–应用某一对象的一个方法,用另一个对象替换当前对象。
说明:apply()将制定的函数function作为对象thisobj的方法来调用,并传入在args数组中包含的参数,返回调用function的返回值,apply的第一个参数thisObj和call方法的一样,第二个参数argArray为一个传参数组。在函数体内,关键字this指代thisobj对象,如果thisobj为null,则只用全局对象。
bind()
语法:function.bind([thisObj[,arg1[, arg2[, [,.argN]]]]])
function.bind(thisobj)
定义:返回一个作为方法调用的函数。
说明:返回一个新函数,该函数会当作对象thisobj的方法来调用。bind的thisObj参数也和call方法一样,t在函数体内,关键字this指代thisobj对象,如果thisobj为null,则只用全局对象。。arg1 … argN可传可不传。如果不传,可以在调用的时候再传。如果传了,调用的时候也传了,则不生效。如:
var person = { name:"cat", age:20, sayHello:function(age){ console.log(this.name); console.log(age); }};var son = { name:"cat2"};var test= person.sayHello.bind(son);test(25); // cat2 25
var test= person.sayHello.bind(son,25);test(); // cat2 25
var test= person.sayHello.bind(son,25);test(30); // cat2 25
二、区别
1、arg传参不同:call需一个一个传,apply传入数组。
function say(name,age){ console.log(name); console.log(age);}say.call(this,"cat",22);say.apply(this,["cat",22]);
2、执行方式不同:call和apply直接执行函数,bind需要再一次调用。
var obj = { a: 81,};var f= { getX: function() {return this.a;}}console.log(f.getX.bind(obj)()); //81console.log(f.getX.call(obj)); //81console.log(f.getX.apply(obj)); //81
总结
call和apply都是改变上下文中的this并立即执行这个函数,bind方法可以让对应的函数想什么时候调就什么时候调用,并且可以将参数在执行的时候添加,这是它们的区别,根据自己的实际情况来选择使用。
- JavaScript中的call、apply、bind方法
- JavaScript中的apply、call和bind方法
- JavaScript 中的 call()、apply() 和 bind() 方法
- JavaScript中的call、apply、bind方法
- javascript 中的call、apply、bind
- Javascript中的apply、call、bind
- Javascript中的apply、call、bind
- Javascript中的apply、call、bind
- Javascript中的apply、call、bind
- JavaScript中的call,apply,bind
- JavaScript中的call(),apply(),bind()方法 关于this指向
- JavaScript进阶:JS中的call()、apply()和bind方法
- 深入理解JavaScript中的call、apply、bind方法的区别
- Javascript中的this,call,apply,bind!
- JavaScript中的作用域 (apply、call、.bind)
- Javascript中的this,call,apply,bind!
- javascript中的作用域 (apply、call、.bind)
- 通俗解释javascript中的call, apply, bind
- iOS 开发一些常用插件和第三方库的整理
- 函数的递归调用实例
- unit2.7访问网络文件共享服务
- 指针用法---常有问题
- 直播 obs
- JavaScript中的call、apply、bind方法
- DB2获取上月底,上年底,上季度底
- jzoj 5050 颜色树
- 20170503 大西北的山
- 最短路径算法 模板_Dijkstra_Bellman.ford_Floyd_spfa
- ViewPager结合Fragment 实现的页面切换
- 关于轮播图的练习和遇到的问题
- linux eval 命令的使用
- asp.net mvc 学习总结