Javascript Node.js v6.2.0类扩展不是函数错误吗?
因此,我尝试在node js中扩展一个类,编译器不断返回以下错误:Javascript Node.js v6.2.0类扩展不是函数错误吗?,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,因此,我尝试在node js中扩展一个类,编译器不断返回以下错误: TypeError: Class extends value #<Object> is not a function or null /views/VICE.js: 我知道node支持这些es6功能,所以我不确定它们为什么不工作 编辑: 我不确定这是否会发生,但当我记录我的ventionrequire时,它返回一个空对象{} console.log (Venue) // This returns {} ???
TypeError: Class extends value #<Object> is not a function or null
/views/VICE.js:
我知道node支持这些es6功能,所以我不确定它们为什么不工作
编辑:
我不确定这是否会发生,但当我记录我的vention
require时,它返回一个空对象{}
console.log (Venue) // This returns {} ???
因此,我的代码中有一个循环引用,我在中导入了正在扩展的类,并将其导入到正在扩展的类中(twister:p)
显而易见的解决办法是简单地删除extends
引用,然后找到另一种方法来实现我想要实现的目标。在我的例子中,它将vention
类属性向下传递到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;
}
}
我曾经遇到过类似的问题,在检查了所有的解决方法后,最终通过删除node_modules文件夹并运行npm I
解决了问题。今天早些时候,一些人遇到了相同的问题:。问题:循环引用。解决方案:找到一种避免循环引用的方法。但我的代码中有什么是循环的?我只是想继承所有vention
类属性,并在VenueViews
类中使用它们@FelixKling“关于我的代码有什么循环?”/views/venue.js
导入/handler/venue.js
哪个导入/views/venue.js
哪个导入/handler/venue.js
。。。。我可以继续说:你的观点不应该从场地继承。是的,现在我看到了@FelixKling没有注意到:哦,thx,循环引用对我来说就像呼吸一样!>将正在扩展的类导入到自己正在扩展的类中,对我来说,这听起来像是设计糟糕的标志。没必要,但想想看。在我的例子中,一个文件中有一个基类B,其他文件中有派生类X、Y、Z。然后在sam文件中,B是,我有另一个使用X、Y和Z的类M。我刚刚将B移到一个单独的文件中。现在是2018年,情况仍然如此…:(使用react,webpack无法很好地处理类的扩展。@Blaskovicz您能详细解释一下它是如何工作的吗?
console.log (Venue) // This returns {} ???
// ./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;
}
}