ES6类中的"this"不是隐式的,是因为ES6类中的方法默认是使用严格模式(strict mode)执行的。在严格模式下,函数内部的"this"不会指向全局对象(如window),而是undefined。这样做的目的是为了避免在类的方法中出现意外的错误。
在ES6类中,如果需要使用类的实例对象作为方法内部的"this",需要使用箭头函数或者在方法内部使用bind()方法来绑定正确的上下文。箭头函数会继承外部作用域的"this",而bind()方法可以手动指定函数内部的"this"。
举个例子,假设有一个Person类:
class Person {
constructor(name) {
this.name = name;
}
sayHello() {
console.log(`Hello, ${this.name}!`);
}
}
如果直接调用sayHello方法,会发现this.name为undefined,因为此时的"this"指向的是undefined。为了解决这个问题,可以使用箭头函数或者bind()方法来绑定正确的上下文:
class Person {
constructor(name) {
this.name = name;
this.sayHello = this.sayHello.bind(this);
}
sayHello() {
console.log(`Hello, ${this.name}!`);
}
}
或者使用箭头函数:
class Person {
constructor(name) {
this.name = name;
}
sayHello = () => {
console.log(`Hello, ${this.name}!`);
}
}
这样就可以确保在类的方法中正确地使用"this"了。
推荐的腾讯云相关产品:腾讯云函数(云函数是一种事件驱动的无服务器计算服务,可以让您无需管理服务器即可运行代码),产品介绍链接地址:https://cloud.tencent.com/product/scf
技术创作101训练营
腾讯技术创作特训营第二季第3期
云+社区沙龙online[数据工匠]
高校公开课
DB・洞见
开箱吧腾讯云
云+社区技术沙龙[第7期]
DBTalk
云+社区技术沙龙[第28期]
领取专属 10元无门槛券
手把手带您无忧上云