从头探究为什么js中的this总是东指西指;apply/call/bind区别

一、从头探究为什么js中的this总是东指西指;apply/call/bind区别

一、从头探究为什么js中的this总是东指西指

来源:https://www.bilibili.com/video/BV13C4y187Ws?spm_id_from=333.999.0.0

this指向问题:

  1. 对于函数来说永远是谁调用了它,函数中的this就指向谁。

无论这个函数是全局函数,还是对象的方法。

不能认为全局函数是window的属性;

寻找this指向的根本方法,是看函数是谁调用的,不是看谁声明的。

非严格模式下:

  • 自调用函数中this指向window;
  • 普通函数调用的this也指向window;
  • 对象调用方法时,this指向对象。

构造函数的原型对象中的this指向构造函数的实例化对象,是因为原型中的方法本来就是设置给自己的实例化对象使用的;如果是通用方法且立即执行话就会call。

是实例化对象调用了原型方法,于是原型方法中this指向了实例化对象

  1. 其他情况
  • 事件处理函数中this指向被绑定的元素本身。
  • this指向的改变:bind/call/apply第一个参数写哪个对象,this就指向谁。
  • 普通函数独立执行,严格模式下,this值为undefined;非严格模式下this值为window。
  • 箭头函数中的this一般与父级函数环境保持一致,父级作用域中的this指向谁,箭头函数中的this就指向谁。

二、apply/call/bind区别

bind/call/apply的简单区别:

  • call/apply都会改变this指向,call传参是call(this,a,b,c),apply传参是apply(this,[a,b,c])且函数立即执行;
  • bind 会创建一个新的函数,且更改新函数中的this指向,并不会立即执行,bind传参是bind(this,a,b,c)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值