理解javascript中的this

本文深入探讨了JavaScript中this关键字的指向问题,包括构造函数、作为对象属性的函数、使用apply或call调用函数以及全局和普通函数调用等场景。通过具体示例,解析了this在不同上下文中的行为。

一直以来,对javascript里面的this总是云里雾里,虽然平时就那么糊里糊涂的用也没问题。但是,自己既然要往前端方向发展,就不能对this不求甚解。

所以,趁着下午有时间,通过看书,查资料,对this有了一些深入的了解。

首先,我们得牢记一个结论:this的指向,是在函数被调用的时候确定的,也就是执行上下文被创建的时候确定的,函数定义的时候确定不了。

下面来分析不同情况下,this的指向:

 

一、构造函数

所谓构造函数,就是用来new对象的函数。构造函数的函数名第一个字母大写(规则约定)。

以上的代码中,如果函数作为构造函数用,那么其中的this就代表它即将new出来的对象。

 

二、函数作为对象的一个属性

如果函数作为对象的一个属性时,并且作为对象的一个属性被调用时,函数中的this指向该对象。

以上代码中,fn不仅作为一个对象的一个属性,而且的确是作为对象的一个属性被调用。结果this就是obj对象。

 

但是,这里fn如果不是作为一个对象的属性被调用,而是被复制到另一个变量中,那么this就指向window,如下代码所示:

 

 三、函数用apply或call调用

apply和call都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。者的作用完全一样,只是接受参数的方式不太一样。

apply
Function.apply(obj,args)方法能接收两个参数:

obj:这个对象将代替Function类里this对象

args:这个是数组或类数组,apply方法把这个集合中的元素作为参数传递给被调用的函数。

call

call方法apply方法的第一个参数是一样的,只不过第二个参数是一个参数列表

 

四、全局和普通函数调用

在全局环境下,this永远是window,这个应该没有非议。

 普通函数在调用时,this也是指向window。

 

 这里要注意一个情况:函数f虽然是在obj.fn内部定义的,但是它仍然是一个普通的函数,this仍然指向window。

 

 以上就是javascript中的this的一些指向性问题,以后有新发现再补充。自己手打了一遍,主要时自己能多理解一些。

 

转载于:https://www.cnblogs.com/p10914119/p/6669322.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值