首页 > 解决方案 > JavaScript 类“this”未定义

问题描述

我是 JavaScript 的新手,我想知道为什么下面会引发错误,validateThisScenario以及我可以做些什么来使它在类似的结构中工作。

class TestClass {
  // ...

  getResponse() {
    return this._response
  }

  validateThisScenario() {
    const response = this.getResponse() // TypeError: Cannot read property 'getResponse' of undefined
  }

  test1() {
    return this.test(this.validateThisScenario)
  }

  test(validation) {
  return Promise.resolve()
    .then(() => validation())
    .catch((err => {
        // ...
    }))
  }
}

标签: javascriptes6-promise

解决方案


this关键字是指类的一个实例。因此,您需要一个类的实例才能调用该方法。一个例外是当一个方法是static.

假设您有这样的课程:

class TestClass {
  doSomething() {
    console.log("Did something");
  }
}

为了调用该doSomething方法,您首先需要它的一个实例。IE

var instanceOfTestClass = new TestClass();
instanceOfTestClass.doSomething();    // OK

如果你不想创建实例,你需要的是一个静态方法

class TestClass {
  static doSomething() {
    console.log("Did something");
  }
}

那么这是允许的:

TestClass.doSomething();  // OK

推荐阅读