一、含义
- this是系统定义好的变量,本质上是一个对象,一般在函数(方法)中使用
- this指向调用该函数的对象
二、指向
- 在函数(方法)中使用(被调用)
谁调用该函数(方法),this就指向谁
this的指向只与调用有关,与函数在哪里定义无关 - 在构造函数中使用(被实例化)
this指向实例化出来的新对象
前面看不见什么.的指向window
三、window介绍
- window表示浏览器窗口,在打开页面的时候自动创建
- 运行在浏览器上的JS,window是全局对象
- 所有的全局变量(包括函数)都是window的属性,可以通过window调用,使用window属性的时候可以省略window
四、this指向的题目
var name = "222";
var a = {
name: "111",
say: function () {
console.log(this.name);
}
}
var fun = a.say;
fun(); // 222 this指向window
a.say(); // 111 this指向a
var b = {
name : "333",
say: function (func){
func();
}
}
b.say(a.say); // 222 this指向window,func()调用了
b.say = a.say;
b.say(); // 333 this指向b
var foo = 123;
function print(){
this.foo = 234; // 此时this指向window, window.foo就是全局变量
console.log(foo); // 234
}
print();
console.log(foo); // 234
var a = 5;
function test(){
a = 0;
console.log(a);
console.log(this.a);
var a;
console.log(a);
}
test() //0 5 0
new test() //0 undefined 0
var age = 10;
function func(name, age) {
this.name = name;
this.age = age;
this.getInfo = function() {
console.log(this.name);
console.log(this.age);
}
console.log(this.name);
}
// 调用func,里面的this指向window,this.name是Tom,this.age是19
func('Tom', 19);
// 实例化func,里面的this只想实例化出来的新对象,this.name是Tom
var o = new func('Tom', 19);
o.getInfo(); // Tom 19
console.log(age); //19 第一个调用func就改变了全局变量
var age = 20;
var obj = {
age: 10,
getAge: function() {
console.log(this.age);
}
}
var obj1 = {
age: 30
};
//给obj1设置属性 属性名是prop 属性值是对象obj
obj1.prop = obj;
var fn = obj1.prop.getAge;
obj.getAge(); //10 obj调用了
obj1.prop.getAge(); //10 obj调用了(obj1.prop调用了,并不是obj1)
fn(); //20 window调用了