JavaScript中的call、apply、bind方法
2017-05-03 20:59
363 查看
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)()); //81 console.log(f.getX.call(obj)); //81 console.log(f.getX.apply(obj)); //81
总结
call和apply都是改变上下文中的this并立即执行这个函数,bind方法可以让对应的函数想什么时候调就什么时候调用,并且可以将参数在执行的时候添加,这是它们的区别,根据自己的实际情况来选择使用。
相关文章推荐
- javascript中apply,call,bind方法
- JavaScript中call,apply,bind方法的总结。
- JavaScript中call,apply,bind方法的总结。
- 关于javascript中apply()、call()和bind()方法
- JavaScript方法call,apply,caller,callee,bind的使用详解及区别
- 实例讲解JavaScript中call、apply、bind方法的异同
- JavaScript里call,apply,bind方法简介
- JavaScript中call,apply,bind方法的总结。
- [置顶] JavaScript中call,apply,bind方法的总结
- JavaScript中的call(),apply(),bind()方法 关于this指向
- JavaScript apply、call、caller、callee、bind使用方法与区别分析
- JavaScript方法call,apply,caller,callee,bind的使用详解及区别
- javaScript中call,apply,bind方法的总结。
- Javascript中call,apply,bind方法的详解与总结
- JavaScript之apply,call以及bind方法
- javascript中函数的call,apply及bind方法
- JavaScript中call,apply,bind方法的总结
- JavaScript中的call、apply、bind方法的区别
- Javascript中call,apply,bind方法的详解与总结
- javascript 之Function对象的apply(),call(),bind(),方法和arguments,caller,length属性