this的指向在不同的环境,有什么区别?

一、介绍

在常见的编程语言中,几乎都有this这个关键字(Objective-C中使用的是self),但是JavaScript中的this和常见的面向对象语言中的this不太一样:

  • 常见面向对象的编程语言中,比如Java、C++、Swift、Dart等等一系列语言中,this通常只会出现在类的方法中。

  • 也就是你需要有一个类,类中的方法(特别是实例方法)中,this代表的是当前调用对象。

  • 但是JavaScript中的this更加灵活,无论是它出现的位置还是它代表的含义。

二、使用

1、默认绑定:指向window,但是在严格模式下指向undefined 

function foo() {
  console.log(this)
 }
 foo()//window

2、隐式绑定,这个就比较简单了,就是谁调用了这个this,this就指向谁

var obj = {
  name: "why",
  foo: foo
}

obj.foo() // obj对象

3、绑定三:显示绑定,call/apply的第一个参数就是this的指向

var obj = {
  name: "obj"
}

// call/apply是可以指定this的绑定对象
foo.call(obj)
foo.apply(obj)
foo.apply("aaaa")

4、new关键字, 指向实例话对象(除非构造函数返回一个引用类型,则new失效。this指针绑定变为返回的引用类型)

5、箭头函数,这个就比较特殊了,因为箭头函数没有this,所以他里面的 this 其实是根据他的上级来定的,也就是他的 this 指向等于他的上级。

       var func = () => {
          console.log(this);
        };
        var obj = {
          ber: func,
        };
        obj.ber(); //window


        var o = {
          a: 10,
          b: {
            a: 12,
            fn: function () {
              console.log(this.a);
            },
          },
        };
        o.b.fn(); //b

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值