关于js中this指向的理解

理解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就指向谁

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值