解析器在调用函数没次都会向函数内部传递一个隐含的参数,这个隐含的参数就是this,this指向的是一个对象,这个对象我们称之为函数执行的上下文对象。
根据函数的调用方式不同,this会指向不同的对象。
- 以函数的形式调用时,this永远都是window。
- 以方法的形式调用时,this就是调用方法的那个对象。
- 当以构造函数的形式调用时,this就是新创建的那个对象。
- 使用call和apply调用时,this是指定的那个对象(call和apply里的第一个参数)。
- 在事件的响应函数中,响应函数是给谁绑定的,this就是谁。
//创建构建一个函数
function fun(){
console.log(this.name);
}
//创建对象
var obj={
name:"孙悟空",
sayName:fun
};
var obj2={
name:"八戒",
sayName:fun
};
var name="全局name属性";
//以方法的形式调用this就是调用方法的对象
obj.sayName();//孙悟空
obj2.sayName();//八戒
//以函数的形式调用,this就是window
fun();//全局name属性