this的指向有哪些

this的指向有哪些

函数的调用方式决定了this的值(运行时绑定),this不能再执行期间被赋值,并且在每次函数调用时this的值夜可能会不同。
共有7种。

全局上下文
this:全局对象
this === window

函数上下文
this的指向取决于函数被调用的方式。

  • 作为的对象的方法调用,this指向对象。
  • 作为普通函数调用:
    - 严格模式,指向全局对象window
    - 非严格:为undefined
    call、apply、bind调用,this指向绑定的对象。
  • 作为构造函数调用,如使用new,this指向new出来的新对象。

类上下文
this指向类。在类的构造函数中,this是一个常规对象类中所有非静态方法都会被添加到this的原型中。

箭头函数
箭头函数是不绑定this的,它的this来源于上级作用域。
this与封闭词法环境的this保持一致。在全局代码中,它将被设置为全局对象。

var window = this;
var foo = (() => this);
console.log(foo()===window); // true

这里调用foo函数,因为箭头函数不绑定this,所以去foo函数的上级查找this,找到了全局对象window。

原型链中的this
如果该方法存在于一个对象的原型链上,this指向调用这个方法的对象。

var o={
   f:function(){
     retrun this.a+thia.b;
   }
};
var p = Object.creat(0);
p.a = 1;
p.b = 4;
console.log(p.f()); // 5  此时this指向p

作为一个DOM事件处理函数
当函数被用作事件处理函数时,它的this指向触发事件的元素。

function bluify(e){
  console.log(this === e.currentTarget);  // true
  this.style.backgroundColor = 'blue';
}
// 获取id为test的Button
let testButton = documnet.getElementsById('test');
// 将bluify作为元素的点击监听函数
testButton.addEventListener('click',bluift,false);

getter和setter中的this
都会把this绑定到设置或获取属性的对象。

var o={
   a:1,
   b:2,
   getSum(){
      return (this.a+this.b)
   }
};
console.log(o.sum);  // 输出3
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简 。单

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值