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

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方法可以让对应的函数想什么时候调就什么时候调用,并且可以将参数在执行的时候添加,这是它们的区别,根据自己的实际情况来选择使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: