在这里简单的说一下本身对this指向的浅薄理解 欢迎各位大佬补充!!
1.先简单的铺垫一个非常非常简单的知识点:
声明全局变量或普通函数 本质上其实是在给顶层对象window自定义属性和方法 这一点大家应该没什么疑问............
我们平常都是习惯性直接这样打印取到值....................
其实这是一个简写 简写前是这样的:
这样就对应了我上面的那句话 我们平常说拿到某个对象的属性值就是对象.属性名 使用该对象的方法就是对象.方法名()
2.好了废话不多说了....进入主题吧........
抛开上面的 在普通函数中this指向的就是它的调用者 谁调用它那么this就指向调用它的那个对象
在上图中就是一个普通函数那么我是怎么调用的呢?
对没错 是通过window. 点出来的!!那么就是说是通过window调用的那么this指向就是window
下一个场景
其实和上面的解释是一样的 只不过在对象中定义了一个方法 通过obj调用那么 fn函数的this指向obj这个对象 下面我们在函数内部打印一下这个this
可见this指向的是obj这个对象 ...其实是一样的道理 只不过调用者变了
3.在构造函数中
构造函数中 this指向构造函数的实例对象 如何创建实例对象呢? new这个构造函数的名字就创建了一个实例对象 那么this就指向当前构造函数的实例对象
在这里打印了 一下this 打印出来的是刚刚创建的objOne实例对象
4.可以使用call apply 改变this指向
此时就使用call改变了指向 此时this指向obj
apply也是一样的用法
5.在箭头函数中:
这样看和普通函数没什么区别 都是指向window 那么再看一种场景
这时fn函数是被obj这个对象调用的但是this指向并不是和普通函数一样指向obj这个对象 这是因为
箭头函数最大的特点是本身不存在this 它的this指向上一级也就是父级的this指向
obj的this指向window 所以箭头函数this指向上级元素的this指向 那么就是window
下一个场景:
在一个普通函数中嵌套一个箭头函数 此时这个箭头函数this指向obj这个对象
箭头函数的上一级是fn这个函数 fn函数的this指向为obj 所以箭头函数的this指向也就是obj
最后一点:
箭头函数不会去找同级 只会找上一级 所以箭头函数中没有构造函数