调用函数时,每次都会向其传入一个隐含的参数this,this指向的是一个对象,这个对象称为函数的上下文对象,根据函数调用方式的不同,this的指向也会有所区别。
1、以方法形式调用时,this指向的是调用方法的那个对象。
function func(){
console.log(this.name)
}
//浏览器的输出结果为"指向的是全局对象",因为func函数被调用后,this指向window对象func();
var name = "指向的是全局对象";
var obj = {
name : "死亡搁浅",
sayname : func
}
obj.sayname();
//浏览器的输出结果为"死亡搁浅",this的指向已经变为obj这个对象
2、当以构造函数调用时,this指向的时调用函数的那个实例(对象)。
3、当以函数调用时,this指向的是window对象
4、当以call()方法和apply()方法调用时,this指向的是指定的那个对象
function func(){
console.log(this.name);
}
var obj1 = {
name = "obj1"
};
var obj2 = {
name = "obj2"
};
func();
浏览器的输出结果显示为window对象调用,符合当以函数调用时,this指向的是window对象
func.call(obj1);
浏览器的输出结果显示为obj1调用,当以call()方法调用时,this指向的是指定的那个对象
func.apply(obj2);
浏览器的输出结果显示为obj2调用,当以apply()方法调用时,this指向的是指定的那个对象
call()方法和apply()方法的区别为,传入实参时,会有些许区别
function func(a,b){
console.log(a);
console.log(b);
}
func.call(obj1,1,2)
func.apply(obj1,[1,2])
call()方法传入实参时,第一个参数为this指向的对象,第二个之后的参数分别为,向函数中传入的实参
apply()方法传入实参时,第一个参数为this指向的对象,向函数中传入的实参需要以数组形式传入