走火入魔javascript — this关键字

this的指向是由它所在函数调用的上下文决定的,而不是由它所在函数定义的上下文决定的。

(1)在全局范围内,this就是指全局对象.

alert(this);

this直接指向了当前环境的全局对象  window

(2)调用函数时,this指向全局对象.例如  test();

function test(){
alert(this);
}
test();

因为调用test() 的环境就是全局,结合开开头第一句话,this 指向当前执行环境,而非定义环境,所以很容易理解当前this就是指向 window

(3)函数的方法调用时,this指向调用方法的对象. 例如  obj.test();   这时this 指 obj对象.

function Person(name){
var name=name;
}
Person.getName=function(){
alert(this);
}
Person.getName();

上面的运行结果:

在对象Person 上调用他的方法 getName()  这是this指向了调用 方法的对象,即 Person 对象

(4)调用构造函数时,this指向新创建的对象. 例如  var t=new test();   这时this指向 新创建的对象 t .

function Person(name){
var name=name;
alert(this);
}
var p=new Person('小小');

运行结果:

弹出的新创建的对象 object  而不会全局 window 或者 Person .


(5)利用apply 或者 call  方法显示设置this ,这时的this就是 apply,call 方法的第一个参数 例如 person.speak.call(student,name);  这里的this 就指向了 student ,如果第一个参数为空时,this指向全局对象  如:  person.speak.call();

(function(){alert(this);}).call(“hello javascript”);

上面前半部分其实是一个函数调用, 而上面第一条描述为函数调用时  this 指向全局对象,即window ,那运行结果怎么是 hello javascript  ??

因为function 后面调用了 call 函数,至于call 和 apply 函数作用本博有单独介绍,请搜索查看.

当调用call 或者  apply  时this 将指向 call  或者 apply 的第一个参数,即 “hello javascript”  也许有人有疑问了,call 和 apply  第一个参数需是对象啊,在javascript这个世界里,一切的一切兼可成为对象!

[完]


回到顶部