未捕获的TypeError:类继承this.MyClass不是对象或null

时间:2020-09-25 09:57:14

标签: javascript class inheritance ecmascript-6

我正在尝试从模块中的另一类扩展一个类。代码如下:

let af = {

    MyClass: class {
      constructor() {
        console.log("constructor of my class");
      }
    },

    myNextClass: class extends this.MyClass {    // *
      constructor() {
        console.log("constructor of the next class");
      }
    },

    myOtherClass: class extends this.MyClass {
      constructor() {
        console.log("constructor of the other class");
      }
    },
}

结果控制台中的

引发TypeError: Uncaught TypeError: class heritage this.MyClass is not an object or null指向*行。你能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

this仅在调用对象的方法时设置,而在初始化对象时不可用。

在分配之后,而不是在创建文字之前,也不能引用变量af

因此您需要对此进行拆分。在对象文字中定义第一个类,其余的则需要赋值,以便它们可以引用变量。

let af = {
  MyClass: class {
    constructor() {
      console.log("constructor of my class");
    }
  }
};

af.myNextClass = class extends af.MyClass {
  constructor() {
    super();
    console.log("constructor of the next class");
  }
};

af.myOtherClass = class extends af.MyClass {
  constructor() {
    super();
    console.log("constructor of the other class");
  }
};

new af.MyClass();
new af.myNextClass();
new af.myOtherClass();