对于初学者来说this关键字真是让人头疼的的东西,这次指向全局,下次又指向函数等等,真的是非常的灵活!
this是JavaScript语言的一个关键字,它是函数体在运行时,内部自动生成的一个对象。
好了话不多说,直接说重点:
第一种情况:普通函数的调用
这种是普通的函数调用方法,属于全局调用,所以this会指向全局变量。 看下列的代码就可知,最后的结果是1。
var a = 1;
function test(){
console.log(this.a);
}
test();// 1
第二种情况:做为函数的对象方法调用
函数作为某个函数的对象方法调用时,this指向这个上级对象。
var a=2;
var o = {
a:1,
f: function (){
console.log(this.a)
}
};
o.f();// 1
第三种情况:作为构造函数调用
构造函数就是用通过一个函数可以生成一个新的函数,此时函数就会指向这个新的对象
var a= 2;
function test(){
this.a = 1;
}
var test1= new test();
console.log(test1.a);// 1
第四种情况:apply/call 调用
apply和call方法是改变函数的调用对象,this就是指向它的第一个参数
var a=1 ;
function test(){
console.log(this.x)
}
var o={};
o.x=2;
o.t= test;
o.t.apply(o);// 2
o.t.call(o);// 2
当参数为空时就是默认指向全局对象
o.t.apply();// 1
o.t.call();// 1
结果变成了1,可知this的指向就是全局对象了。
这些都是我观看阮一峰老师博客所学来的,我觉得这对初学者确实很有用处,希望的对向我一样的菜鸟提供一些帮助。
(完)