我是节点js的Java脚本初学者,并会做出反应。但我也是专业开发人员。我如何用js处理情况,但我需要更深入地研究js。我在互联网上浏览了许多阅读材料和视频,并取得了一些进展。最近,我使用了ES 6 Java脚本,并遵循了所谓的OOP。我不小心像下面的代码一样写了代码,以期得到期望的结果。
class Logger {
constructor() {
this.printName();
}
print (text) {
console.log(text);
}
printName (name = 'there') {
this.print(`Hello ${name}`);
}
}
const logger = new Logger();
我只想在创建logger对象时运行一个方法,然后该方法在您可以看到的类中调用另一个方法。
因此有效。但是当我进一步研究JS时,发现了一些让我感到困惑的东西。
JS类方法需要将'context'或'this'绑定到方法,如果它引用某个方法从另一个方法本身自身获取
然后突然,我记得我以前在课堂上做什么。我在下面创建的代码可以对其进行测试。
class Logger {
printName (name = 'there') {
this.print(`Hello ${name}`);
}
print (text) {
console.log(text);
}
}
const logger = new Logger();
const { printName } = logger;
printName();
// <- Uncaught TypeError: Cannot read property 'print' of undefined
如果我想在类的另一个方法中使用方法,则需要像下面那样将“ this”“绑定”到该方法。
class Logger {
constructor () {
this.printName = this.printName.bind(this);
}
printName (name = 'there') {
this.print(`Hello ${name}`);
}
print (text) {
console.log(text);
}
}
我清楚地看到,这两个代码并不相同,但是我想知道实际发生了什么。