Jam*_*111 15 javascript node.js ecmascript-6
所以我试图在节点js中扩展一个类,并且编译器继续返回以下错误:
TypeError: Class extends value #<Object> is not a function or null
Run Code Online (Sandbox Code Playgroud)
我检查过我正在正确导出课程,我是,有什么想法吗?我将在下面发布我的代码:
var VenueViews = require('../views/venue'); // If I remove this the error will dissapear (as expected)
class Venue {
constructor(data) {
this.setDataHere = data;
}
main () {
var View = new VenueViews(); // This doesn't run
}
}
module.exports = Venue;
Run Code Online (Sandbox Code Playgroud)
var Venue = require('../handlers/venue');
console.log (Venue) // This returns {} ???
class VenueViews extends Venue {
constructor() {
super();
}
}
module.exports = VenueViews;
Run Code Online (Sandbox Code Playgroud)
我知道节点支持这些es6 features,所以我不确定他们为什么不工作?
我不确定这是否会发生,但是,当我记录我的Venuerequire时,它会返回一个空对象{}.
console.log (Venue) // This returns {} ???
Run Code Online (Sandbox Code Playgroud)
Jam*_*111 28
所以事实证明我在我的代码中有一个循环引用,在那里我importing是扩展的类,进入自己扩展的类(绕口令:P).
显而易见的解决方法是简单地删除extends引用并找到另一种方法来完成我想要实现的目标.在我的例子中,它将Venue类属性传递给VenueViews构造函数.
例如 var x = VenueViews(this)
在我的例子中,由于我试图在 Typescript 中设置工厂模式,这与 @James111 遇到的问题(循环导入)相同。我的解决方法是将代码移动到文件中,类似于以下内容:
// ./src/interface.ts
import { ConcreteClass } from './concrete';
export interface BaseInterface {
someFunction(): any;
}
export class Factory {
static build(): BaseInterface {
return new ConcreteClass();
}
}
// ./src/base.ts
import { BaseInterface } from './interface';
class BaseClass implements BaseInterface {
someFunction(): any {
return true;
}
}
// ./src/concrete.ts
import { BaseClass } from './base';
export class ConcreteClass extends BaseClass {
someFunction(): any {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16092 次 |
| 最近记录: |