关于this在各种情况的指向
① 普通函数中this指向的是window
function person(){ // 函数也是window对象里面的
this.name = "小明";
console.log(this); //输出this 可以看到this的指向
console.log(this.name); //输出小明
}
person(); //输出
此时this的指向是并不是person,而是 window ,因为函数也是window对象里面的, 因此输出的是window。
② 在对象内部的时候,this指向的是他本身
var name = "小明";
var person={ // 在对象内部的this 指向的是本对象
name :"小红",
showName:function(){
console.log(this.name );//此时的this指向person对象
}
}
person.showName(); // 输出小红
此时的this指向person对象
③ 作为构造函数来调用的时候,this指向该实例化对象
function Person(name){
this.name=name; //谁实例化了对象调用函数 this就指向谁 ,没有实例化就指向window
}
var personX=Person("翠花"); //personX没有new 没有实例化
// console.log(personX.name); //undefined 报错
//构造函数没有通过new构造对象,相当于window对象调用 Person("翠花")方法。
// 所以this指向的是window对象,并进行赋值window.name="翠花"。
console.log(window.name); //输出翠花
var personY =new Person("秋香"); //实例化构造函数 得到实例对象
console.log(personY.name); //输出 秋香
personX 对象因为没有new进行实例化,因此如果直接personX.name 调用会报错,此时的this指向window,通过window.name 可以将翠花进行输出。
//构造函数没有通过new构造对象,相当于window对象调用Person(“翠花”)方法。
// 所以this指向的是window对象,并进行赋值window.name=“翠花”。
personY 对象经过new进行实例化之后,此时this就指向personY ,因此可以直接输出personY.name 。