如何理解js中的this

this的值取决于它所在的函数如何被调用。下面是this可以获得新值的6种不同方式:

  • this在全局范围内
  • this在对象的构造函数内
  • this在对象的方法内
  • this在一个简单的函数内
  • this在箭头函数内
  • this在一个事件侦听器内

下面我们一起来看看this是如何在每个环境中被改变的。

一、this在全局范围内

当this在任何函数外面被调用时,也就是说在全局环境中被调用,在浏览器中。它默认指向window对象。

console.log(this) // Window

一般在全局环境中,我们很少用this关键字 ,所以我们对它也没有那么在意,继续看下一个环境。

二、this在对象的构造函数内

当我们使用new关键字创建一个对象的新的实例时,this关键字指向这个实例。

function Human (age) {
    this.age = age;
}
let greg = new Human(22);
let thomas = new Human(24);

console.log(greg); // this.age = 22
console.log(thomas); // this.age = 24

通过上面的代码,我们会发现,greg是Human的一个实例,现在无论何时调用greg,this都不会指向thomas。所以让this指向对象的实例 是完全有道理的。

接下来让我们看一个密切相关的环境。

三、this在对象的方法内

方法是与对象关联的函数的另一个通俗叫法,如下所示。

(注: 这里的方法是用ES6语法来写的, 如果不知道它们是什么, 请参见这里).

let o = {
    // A method
    aMethod(){}
}

在对象的任何方法内的this都是指向对象本身。

let o = {
    sayThis(){
        console.log(this);
    }
}

o.sayThis() // o

既然this指向对象本身,你就可以用方法来获取对象的实例,如下所示:

function Human(name) {
    return {
        name, 
        getName() {
            return this.name;
        }
    }
}

const zell = new Human("Zell");
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值