这可能很明显,但我不明白如何使用module.export
导出子类和超类。我目前收到错误ReferenceError: not defined
。这是Dalmatian
中的示例子类/js/dalmatian.js
:
class Dalmatian extends Dog{
constructor(){
super();
/// stuff
}
}
module.exports = {
Dalmatian : Dalmatian
}
如果我然后在另一个*.js
文件中导出此类,我会遇到问题:
require('../js/dog.js'); // this works
require('../js/dalmatian.js'); // this fails
ReferenceError: Dog is not defined
我不明白。超级构造函数在达尔马提亚语中使用,即super();
。
如何导出基类(此处为Dog
),以便我不会收到此错误?
答案 0 :(得分:3)
您必须在子类声明中require
父类。另外export
父表单子类export
子句。
然后,您可以使用Dog
子类的脚本中的Dalmatian
和requires('./dalmatian')
。
这是一个有效的例子:
<强> dog.js 强>
class Dog{
constructor(){
console.log('dog');
}
}
module.exports = Dog;
dalmatian.js (请注意我们如何导出两者)
const Dog = require('./dog');
class Dalmatian extends Dog{
constructor(){
super();
console.log('dalmatian');
}
}
module.exports = {
Dalmatian : Dalmatian, //export this class
Dog: Dog // and export parent class too!
}
<强> test.js 强>
const Dalmatian = require('./dalmatian').Dalmatian;
const Dog = require('./dalmatian').Dog; //---> Notice this
//const Dog = require('./dog'); ---> works too, but above is clearer and cleaner
new Dalmatian();
new Dog();
输出:
➔ node test.js
dog
dalmatian
dog
答案 1 :(得分:2)
Dog
未在包含Dalmation
的模块中定义,因为模块无法访问彼此的变量。
您的 Dalmation 模块应如下所示:
var parentClass = require('./Dog.js')
class Dalmatian extends parentClass.Dog {
constructor(){
super();
console.log('starting dalmation')
}
}
module.exports = {
Dalmatian: Dalmatian
}
另外,请注意,super()应该在>> 构造函数方法中调用,而不是在它之前。