this 是 JavaScirpt 语言的一个关键字。
它是函数运行时,在函数体内部自动生成的一个对象,只能在函数体内部使用。
1.以函数形式调用,this指向全局window对象。
var x = 1;
function foo(){
alert(this.x);
}
foo();//1
window.x = 2;
foo();//2
2.以对象的方法调用,this指向上级对象。
function foo(){
alert(this.x);
}
var obj = {};
obj.x = 1;
obj.m = foo;
obj.m();//1
3.作为构造函数调用,this指向新对象。
var x = 1;
function foo() {
this.x = 2;
}
var obj = new foo();
alert(x);//1(显然这时的this并不指向全局对象)
alert(obj.x);//2
4.通过call(),apply()调用,this指向call,apply方法内的对象。
var x = 1;
function foo() {
alert(this.x);
}
var obj1 = {};
var obj2 = {};
obj1.x = 10;
obj2.x = 100;
obj1.m = foo;
obj1.m.apply();//1
obj1.m.apply(obj1);//10
obj1.m.call(obj2);//100
想要了解call和apply的区别和更详的知识的同学可以戳这里
本篇文章也只能算this指向的基础,旨在于通过较小篇幅让刚接触js的同学能更容易的看懂。js有很多的坑,欢迎在下面探讨。