关于this的解析:看了就懂,忘记了随时回来看
-
初识this
this => 永远表示某个对象,但写在不同的地方,它表示不同的对象 -
全局下的this:
window => 浏览器环境下的全局对象
console.log(this) => 全局作用域内的this指向window -
默认情况的this:
this一般只用在函数内部:函数内的this就是找到这个函数的所有者
let obj = { name:'你好程序猿', fn(){ // 这里的this指向obj,fn属于obj console.log(this.name); } } obj.fn();
函数内的this指向这个函数的所有者,是因为函数的所有者才有这个函数,一般也是由所有者来调用该函数
那能不能认为谁拥有这个函数,this就指向谁呢?
通常情况确实如此,但这样并不不严谨,我们继续往下看
- this严格的定义
this => 哪个对象调用this所在的函数,this就指向这个对象.(严谨)
那怎么样算调用?
函数一定是需要通过某个对象调用的
- 默认情况,对象只能调用自己的方法,不能调用别的对象的方法
- 默认情况,函数的所有者就是函数的调用者
所以找this的指向,就是看看这个调用的前面是哪个对象,this就指向这个对象
- 确定this指向步骤(默认情况)
- a:this写在哪个函数声明内(写在哪个函数的{}里,先找到this写在哪)
- b:这个函数的调用在哪里 => 关键
- c:看看这个调用的前面是哪个对象,this就指向这个对象
- 确定this指向(特殊情况)
js是如何让一个对象调用不属于它的方法呢
call方法 => 临时改变一次this指向
apply方法 => 临时改变一次this指向,与call的区别是传递的参数格式为数组
bind方法 => 绑定this => 永久改变this指向
了解详细情况,请关注后面的call,apply,bind解析
- 确定箭头函数this指向
有箭头函数,不要分析箭头函数的调用,分析箭头函数的父函数的调用
了解详细情况,请关注后面的箭头函数的this指向解析
- 确定new构造函数this指向
有new,this指向实例