1.this永远指向一个对象;this的指向完全取决于函数调用的位置;
2.在JavaScript语言之中,一切皆对象,运行环境也是对象,所以函数都是在某个对象下运行,而this就是函数运行时所在的对象(环境)。
情况一: 运行环境是全局
var x = 1;
function test() {
console.log(this.x);
}
test(); // 1
情况二:运行环境是对象
function test() {
console.log(this.x);
}
var obj = {};
obj.x = 1;
obj.m = test;
obj.m(); // 1
情况三: 作为构造函数调用
function test() {
this.x = 1;
}
var obj = new test();
obj.x // 1
指向构造的新对象
情况四: apply 调用
var x = 0;
function test() {
console.log(this.x);
}
var obj = {};
obj.x = 1;
obj.m = test;
obj.m.apply() // 0
apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。
如果把最后一行代码修改为
obj.m.apply(obj); //1
运行结果就变成了1,证明了这时this代表的是对象obj。
练习:
补充:
类中变量的运行环境是类,类中函数的运行环境是会发生改变,可能是对象也可能是全局