解析器在调用函数的时候,都会向函数内部传递一个隐含的参数,隐含的参数就是this。
This指向的是一个对象,这个对象成为函数执行的上下文对象;
- 以函数的形式调用时,this永远指向window
- 以方法(打点)的形式调用,this就是调用方法的那个对象
- 以构造函数调用时,this是新创建的那个对象;
- 使用call和apply调用时,this是指定的那个对象;( 括号里面的参数是谁,this就指向谁)
<script type="text/javascript">
/*1. 以函数(fun())的形式调用时,this永远指window
*/
function fun1(){
console.log(this);
}
fun1();
/* 2. 以方法(obj打点)的形式调用时,this就是调用方法的那个对象
*/
var obj = {
name: "孙悟空",
sayName: fun1,
}
obj.sayName(); //Object { name: "孙悟空", sayName: fun1() }, this指向的就是obj;
/*3. 当以构造函数的形式调用时,this就是新创建的那个对象
*/
function Person(name, age){
this.name = name; // this在这里指代新创建的对象per1
this.age = age;
}
//新创建的对象per1
var per1 = new Person("Monkey", 6);
console.log(per1);
/* 4. 使用call和apply调用时,this是指定的那个对象; */
function fun2(){
console.log(this.name);
}
var obj1 = {
name:"Pig"
}
fun2.apply(obj1); //打印是pig,this指代obj1, 括号里面的参数是谁,this就指向谁
</script>