我在模块中定义了一个类:
"use strict";
var AspectTypeModule = function() {};
module.exports = AspectTypeModule;
var AspectType = class AspectType {
// ...
};
module.export.AspectType = AspectType;
但是我收到以下错误消息:
TypeError: Cannot set property 'AspectType' of undefined
at Object.<anonymous> (...\AspectType.js:30:26)
at Module._compile (module.js:434:26)
....
我应该如何导出此类并在另一个模块中使用它?我已经看到了其他SO问题,但是当我尝试实现他们的解决方案时,我收到了其他错误消息。
答案 0 :(得分:95)
如果您在节点4中使用ES6,则在没有转换器的情况下不能使用ES6模块语法,但CommonJS模块(节点的标准模块)的工作方式相同。
myConstants.constant1
应该是
module.export.AspectType
因此错误消息&#34;无法设置属性&#39; AspectType&#39;未定义&#34;因为module.exports.AspectType
。
另外,
module.export === undefined
你可以写吗?
var AspectType = class AspectType {
// ...
};
并获得基本相同的行为。
答案 1 :(得分:92)
// person.js
'use strict';
module.exports = class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
display() {
console.log(this.firstName + " " + this.lastName);
}
}
// index.js
'use strict';
var Person = require('./person.js');
var someone = new Person("First name", "Last name");
someone.display();
答案 2 :(得分:28)
使用ECMAScript 2015,您可以导出和导入多个类
class Person
{
constructor()
{
this.type = "Person";
}
}
class Animal{
constructor()
{
this.type = "Animal";
}
}
module.exports = {
Person,
Animal
};
然后你在哪里使用它们:
const { Animal, Person } = require("classes");
const animal = new Animal();
const person = new Person();
如果出现名称冲突,或者您更喜欢其他名称,可以像下面这样重命名:
const { Animal : OtherAnimal, Person : OtherPerson} = require("./classes");
const animal = new OtherAnimal();
const person = new OtherPerson();
答案 3 :(得分:11)
class expression 可以用来简化。
// Foo.js
'use strict';
// export default class Foo {}
module.exports = class Foo {}
-
// main.js
'use strict';
const Foo = require('./Foo.js');
let Bar = new class extends Foo {
constructor() {
super();
this.name = 'bar';
}
}
console.log(Bar.name);
答案 4 :(得分:8)
其他几个答案接近,但老实说,我认为你最好采用最干净,最简单的语法。 OP要求在ES6 / ES2015中输出一个类。我认为你不能比这更清洁:
'use strict';
export default class ClassName {
constructor () {
}
}
答案 5 :(得分:8)
我只是这样写的
AspectType文件中的:
const AspectType = require('./AspectType');
var aspectType = new AspectType;
并像这样导入:
<div class="jumbotron my-jumbotron">
<img class="img-responsive" src=
{{'https://static.pexels.com/photos/2232/vegetables-italian-pizza-
restaurant.jpg'}}>
</div>
答案 6 :(得分:0)
我遇到了同样的问题。 我发现的是我称我的接收对象与类名同名。例如:
const AspectType = new AspectType();
这样搞砸了......
希望这有帮助
答案 7 :(得分:-1)
有时我需要在一个文件中声明多个类,或者我想导出基类并保持其名称导出,因为我的JetBrains编辑器更了解它。我只是用
global.MyClass = class MyClass { ... };
以及其他地方:
require('baseclasses.js');
class MySubclass extends MyClass() { ... }