解析器在调用函数时,每次都会想函数内部传递进一个隐含的参数,这个隐含的参数就是this。
- this是个参数,指向的是一个对象,这个对象成为函数执行的上下文对象,根据函数的调用方式不同,this会指向不同的对象
- 以函数的形式调用,this永远都是window //fun();
- 以方法的形式调用时,this就是调用方法的对象,方法是谁调用的,this就是谁 //obj.sayName();
function fun(){
console.log(this.name);
}
//创建一个对象
var hello = {
name:"张三",
sayHi:fun //将fun赋值给hello对象的sayHi属性
};
var name = "我是全局属性";
//以函数的形式调用
fun(); //调用的就是全局变量,this就是window,输出的结果就是:我是全局变量
//以方法的形式调用
hello.sayHi(); //调用sayHi就等于调用fun,执行this.name相当于执行的是hello.name,所以最终输出的结果是:张三。 这里的方法是hello调用的,所以this就是hello