1、call()和 apply()是JavaScript预定义的一个方法,可以用来调用对象所以者的参数,属性及方法,这些方法都是Function这个对象所提供的方法,而这些方法的作用就是为了改变函数中this指向的。
var obj = {
name: '小明',
fun: function (){
return this.name + ":" + obj.name;
}
}
console.log(obj.fun());//this指向obj,输出:小明
var porse = {//需要执行的对象:porse.fun();
fun: function (){
return this.name + "今年" + this.age + "岁";
}
}
//小明
var xm = {
name: '小明',
age: 18
}
//小红
var xh = {
name: '小红',
age: 20
}
//让小明去执行要做的事情
console.log(porse.fun.call(xm));//小明今年18
console.log(porse.fun.call(xh));//小红今年20
上面代码使用call()可以调用其他对象的属性、参数及方法 通用对象(父对象): 要做的事情,改变了this的指向。
2、apply()与call()方法相同,可以改变this指向,apply()接收数组形式的参数
(1)写法:
call()方法内接受参数若干,第一个参数为改变后的this指向,后面可以跟若干参数,用逗号隔;该方法调用后立即执行;
apply()方法接受两个参数,第一个参数为改变后的this指向,第二个参数为数组,将要传递的所有参 数必须放在数组内;该方法调用后立即执行;
console.log(porse.fun.apply(xm));
console.log(porse1.fun.apply(xh, ['aa', 'bb']));
var arr = [1,2];
console.log(porse1.fun.apply(xh, arr));