函数相关:this调用

94 阅读2分钟

调用函数时,每次都会向其传入一个隐含的参数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指向的对象,向函数中传入的实参需要以数组形式传入