为什么在构造函数中调用时,我们不需要将此绑定到Java脚本ES6类方法?

时间:2019-12-15 12:02:32

标签: javascript ecmascript-6 constructor this

我是节点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); 
  }
}

我清楚地看到,这两个代码并不相同,但是我想知道实际发生了什么。

0 个答案:

没有答案