this关键字

一、this关键字是一个非常重要的语法点,this在构造函数中表示实例对象,还可以用在其他场合,this的共同点就是总是返回一个对象,简单的说:this就是属性或者方法当前所在的对象

二、对象的属性是可以赋值给其他的对象,所以this的指向是可变的

 

 三、实质

 

 上面代码是将name对象赋值给arr,此时JaveScript引擎会先在内存里面,生成一个{name:'小红'}对象,然后把这个对象的内存地址赋值给变量arr,也就是说arr就是一个地址(reference),如果要读取arr.name,引擎先从obj拿到内存地址,然后再从该地址读出原始的对象,返回它的name属性

原始的对象以字典解构保存,每一个属性名都对应一个属性描述对象。比如上面的arr对象,实际是以下面的形式进行保存的

 

 

这样展示结构就很清楚,还有一种情况是属性的值可能是一个函数

 

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

函数是一个单独的值,所以它可以在不同的环境(上下文)执行

三、使用场景

this的使用场景主要有以下几个

1.全局环境

全局环境使用this,指的就是顶层对象

 

 上面代码说明,不管是不是在函数内部,只要在全局环境下运行,this指顶层对象

window

2.构造函数

构造函数中的this,指的是实例对象

 

 3.对象的方法

this指向是方法运行时所在的对象,该方法复制给另一个对象,会改变this的指向

 

posted @ 2021-12-01 17:50  danmo_xx  阅读(210)  评论(0编辑  收藏  举报