js学习之this指向问题

this的指向本质上是指向调用者的即谁调用函数或方法,this就指向这个调用者。它取决于函数的调用,而函数有三种调用方式。

所以我们根据这个本质,按照不同的环境把this指向划分为三个不同的场景。

1.调用处于全局作用域的函数下,this指向全局即window对象。

我们举个简单栗子:

function fn() {
    console.log(this);
      }
fn()  //this指向window

fn函数处于全局作用域下,调用fn时,其实本质上是window在调用,即window.fn(),所以这时this就是指向window。我们看下打印this的结果:

 

2.当调用对象里面的方法(函数)时,this指向该实例对象

栗子:

let obj = {
     name: 'xia',
     age: '19',
     say: function () {
        console.log(this)
     }
   }
  obj.say()   //this指向该对象obj

 上面的栗子中匿名函数function属于实例对象中的一个方法叫say,当我们调用这个实例对象的say方法时,即obj.say();obj此时就是调用者,所以this指向调用者obj对象。我们看下打印的结果:

 3.当调用构造函数用来生成一个实例对象时(即用new 来创建对象), 此时this指向该构造函数的实例对象

我们同样举个例子:

function Obj() {
    say = function () {
        console.log(this);
        }
    }
    let obj1 = new Obj() //this指向实例对象obj1
    obj1.say()

由构造函数Obj通过new来创建的一个实例对象可以直接调用say方法,此时this就指向这个obj1实例对象。我们看看打印结果:

 所以我们可以根据不同的函数调用场景来总结出三种this的指向:

1.调用处于全局作用域的函数下,this指向全局即window对象。

2.当调用对象里面的方法(函数)时,this指向该实例对象

3.当调用构造函数用来生成一个实例对象时(即用new 来创建对象), 此时this指向该构造函数的实例对象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值