理解JavaScript中this的指向问题之前,首先要记住一句话“this的最终指向始终是调用的它的对象”
情况一:函数的直接调用
function hi(){
alert(this)
}
hi()// 此时this的指向是window
理解这段代码,通常我们定义全局变量实际上是为window添加属性,如
var a=1; =>>window.a = 1;
上面的代码可以写成: window.hi() 参照那句真言,此时this的指向就是条用它的window对象
情况二:对象中函数
var obj = {
a: "hi",
fn: function(){
alert(this)
}
}
obj.fn()//此时this为obj
这种情况的,比较直观,根据真言,obj调用的函数fn,所以函数中的this指向就是obj
情况三:此情况不好描述直接上代码
var obj = {
a: {
fn: function(){
alert(this)
}
}
}
obj.a.fn();//此时的this指向为a,而不是obj
这种情况看似复杂,但和真言不冲突,虽然函数是有两个对象点出来的,但是真正调用函数的对象是a,所以此时fn的this指向就是上一级对象,也就是离他最近的对象,近水楼台吧
还有类似第三种情况的代码如:
var obj = {
fn:function(){
alert(this)
}
}
window.obj.fn();
一个道理,this指向是obj
下面是一个我之前遇到的面试题:
说明下面执行的结果:
function doSomething(){
alert(this)
}
element.onclick = doSomething(); //点击element后
element.onclick = function(){ doSomething()} //点击element后
doSomething() //直接执行
三种情况的输出的结果分别是 element对象、window对象、window对象
理由就是文章开篇的真言,this的最终指向始终是调用的它的对象
刚遇到的一类题目,还是挺有参考价值的,如下:
var person = {
fullname: function{
console.log(this);
},
printAge: function(){
console.log(this);
}
}
person.fullname(); //this指向person
var age = person.printAge;
age(); //this指向window(浏览器中)
代码中,首先将person.printAge的值赋给了age,然后在调用age()的时候,window.age(),调用age的对象是window,和以上真言中的道理一样,谁调用函数this就指向谁
232

被折叠的 条评论
为什么被折叠?



