走火入魔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这个世界里,一切的一切兼可成为对象!
[完]