this的指向问题

有时候会对this的指向不够清晰,今天根据自己的理解做一个系统的总结,如有不足之处各位大神请指教

什么是this?

this就是一个局部变量,调用函数的时候由系统自动创建  函数调用结束后自动销毁

在不同环境中this的指向问题如下:

1 全局环境下 this值指向window

2 对象里面的方法 也是谁调用函数 this就指向谁
但也不一定  如果将对象的这个方法赋值给外面的一个变量,那么这个时候this就是指向window  (例如:对象里面的方法是一个函数体,把函数体赋值给外面的一个变量,通过变量调用函数,那此时函数里面this值就是window)

3  dom事件的回调函数,this值是触发事件的dom元素,函数一开始没有执行,是用户点击了按钮之后系统自动给函数加上了小括号,才开始调用执行的(dom事件里面又有通过匿名函数赋值给变量的函数调用,点击事件被触发后,才调用的函数,这时候函数的执行环境是全局 那么此时this指向就是window,这里是相当与点击之后再把函数拿出来执行

4 定时器  间歇函数 延时函数的this值都是指向window
例如 定时器 设定2s后执行 就是2s后系统自动调用这个函数  所以定时器的this就是指向window(如果一个函数里面的定时器是箭头函数的形式,那么这个时候的箭头函数的this值是指向它的上一层作用域的this值)

5 构造函数的this值是new出来的实例化对象

6 箭头函数的this值
  需要分析函数定义的位置和函数调用的位置
箭头函数内部没有this值  如果访问就是找上一层作用域的this值
箭头函数在什么位置定义的 它的thhis值就是上一层作用域的this值
不能用箭头函数来写构造函数  因为箭头函数没有this值  无法用this绑定属性和方法

7 普通函数的this值   

就是谁调用这个函数,这个函数的this就指向谁、如果一个函数中有this  这个函数包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它的上一级的对象

8 原型对象上面的方法里面的this值是等于new出来的实例化对象   (方法就是函数)
构造函数里面的this值也是等于new出来的实例对象

9 因为this'比较灵活,可以任意变化,所以有三个方法可以手动指定this的值:
call   apply  bind

第一种    函数.call(我们要修改的对象, 参数1,参数2,参数3,........)

第二种   函数.apply(我们要修改的对象, [参数1,参数2,参数3, .......])

第三种  函数.bind() 不会调用函数 返回值是一个被修改过this的新函数
它的参数是 bind(被修改的this值,参数1,参数2,参数3,......)

call ,apply 的区别
 都是立即调用
 参数  call的是 是逗号分隔, apply参数是数组
 返回值 返回值就是 普通函数的返回值

10  一个函数里面的函数,如果自己直接调用,那么this就是window

如何查看此时的this值呢?

可以 在全局定义一个变量that接收this值
在函数内部将this赋值给that保存起来   在全局打印that

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值