this的深入理解

this的原理

this 是 JavaScript 中的一个关键字。
它通常被运用于函数体内,依赖于函数调用的上下文条件,与函数被调用的方式有关。
它指向谁,则完全是由函数被调用的调用点来决定的。
所以,this,是在运行时绑定的,而与编写时的绑定无关。
随着函数使用场合的不同,this 的值也会发生变化。但是有一个总的原则:
this 总会指向,调用函数的那个对象

JavaScript 语言之所以有 this 的设计,跟内存里面的数据结构有关系。

var obj = { foo: function () {} };

JavaScript 引擎会将函数单独保存在内存中,然后再将函数的地址赋值给 foo 属性的 value 属性。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ow9DPrNZ-1649684507042)(https://user-gold-cdn.xitu.io/2019/1/19/16864091b7cf8373?imageView2/0/w/1280/h/960/format/webp/ignore-error/1)]

可以看到,函数是一个单独的值(以地址形式赋值),所以才可以在不同的环境中执行。
又因为,JavaScript 允许在函数体内部,引用当前环境的其他变量。
所以需要有一种机制,能够在函数体内部获得当前的运行环境(context)。
所以,this就出现了,它的设计目的就是在函数体内部,指代函数当前的运行环境。

this 的用法

1、纯粹的函数调用

这是函数的最通常用法,属于全局性调用,因此 this 就代表全局对象 window

2、作为对象方法的调用

函数作为某个对象的方法调用,这时 this 就指这个上级对象。

3、作为构造函数调用

所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this 就指这个新对象。

4、apply调用

apply() 是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。
因此,this 指的就是这第一个参数。apply() 的参数为空时,默认调用全局对象。

5、箭头函数

ES6 中的箭头函数,是在创建是指定的,指向父级作用域中的this

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值