解析器在调用函数时每次都会向函数内部传递一个隐含的参数,这个隐含的参数就是this,
this指向是一个对象,这个对象我们称为函数执行的上下文对象。
根据函数调用方式的不同,this会指向不同的对象
1.以函数的方式调用时,this指向永远都是window
2.以方法的形式调用时,this就是调用方法那个对象
3.以构造函数的形式调用时,this指向的是新创建的那个对象
4.使用call和apply调用时,this指向的是那个对象
function fun()
{
console.log(this.name)
}
fun() //window
var obj={
name:"孙悟空",
sayName:fun
}
obj.sayName() // 孙悟空
fun() //window
使用this的好处(灵活性)
//创建一个name变量
var name="全局“;
//创建一个fun()函数
function fun()
{
//console.log(name);
//console.log(obj1.name)
//console.log(obj2.name)
//console.log(this.name)
}
//创建两个对象
var obj1={
name="孙悟空",
sayName:fun
}
var obj2={
name="沙和尚",
sayName:fun
}
fun();//打印全局
obj1.sayName() //打印全局
obj1.sayName()//调用第二个时打印孙悟空
obj1.sayName()//调用第三个时打印沙和尚
obj2.sayName()//打印全局
obj2.sayName()//调用第二个时打印孙悟空
obj2.sayName()//调用第三个时打印沙和尚
//调用第四个this.Name分别打印彼此
obj1.sayName()//打印孙悟空
obj2.sayName()//打印沙和尚