【发布时间】:2016-06-24 13:14:39
【问题描述】:
我有以下 JavaScript 文件:
src/js/classes/Lexus.js:
import {Car} from 'src/js/classes/Car';
export class Lexus extends Car {
constructor() {
super("Lexus");
}
}
src/js/classes/Mercedes.js:
import {Car} from 'src/js/classes/Car';
export class Mercedes extends Car {
constructor() {
super("Mercedes");
}
}
src/js/classes/Car.js:
import {Lexus} from 'src/js/classes/Lexus'; //either of those imports works, but not both!
import {Mercedes} from 'src/js/classes/Mercedes'; //either of those imports works, but not both!
export class Car {
constructor(make) {
this.make = make;
}
static factory(msg) {
switch(msg) {
case "Lexus":
return new Lexus();
case "Mercedes":
return new Mercedes();
}
}
}
和 app.js:
import {Lexus} from 'src/js/classes/Lexus';
import {Mercedes} from 'src/js/classes/Mercedes';
import {Car} from 'src/js/classes/Car';
var car = Car.factory("Lexus");
console.log(car);
有趣的是,如果我将 either Lexus 或 Mercedes 导入 Car 类并调用 app.js 中的工厂方法 - 一切正常;但是,如果我将 both Lexus 和 Mercedes 导入 Car 类,则会出现错误:
超级表达式必须为 null 或函数,而不是未定义
我错过了什么?
【问题讨论】:
-
我不确定是否需要在 app.js 中导入 Lexus 和 Mercedes,因为它们不是在那里构建的。
-
您确定该错误不是基于 Car 和您的特定 make 类相互依赖循环吗?
-
如果您在每个新语句之后的 case 中加上一个 break 会发生什么?编辑:nvm 你正在返回,所以开关超出范围 sry
-
Sterling Archer,我确实需要将 Lexus 和/或 Mercedes 导入 app.js,以便从工厂方法实例化。
-
@Binvention,如果基于 Car 的错误并使类相互依赖循环,它如何解释任一导入工作但不能同时工作的事实?
标签: javascript inheritance ecmascript-6