I have the following files: gist
我有以下文件:要点
The index.js attempts instantiate a base "Auth" class but in it's constructor the auth class acts as an object factory and passes back a subclass of Auth instead.
index.js尝试实例化一个基类“Auth”类,但是在它的构造函数中,auth类充当对象工厂并且传回一个Auth的子类。
'use strict';
import Auth from './Auth';
let o = new Auth({type:'Oauth1'});
console.log(o);
o.getToken();
The Auth.js class definition is as follows:
Auth.js类定义如下:
'use strict';
import Oauth1 from './Oauth1';
export default class Auth {
constructor(config) {
if (this instanceof Auth) {
return new Oauth1(config);
} else {
this.config = config;
}
}
getToken() {
console.log('Error: the getToken module must be implemented in the subclass');
}
}
And the Oauth1.js class definition is:
而Oauth1.js类的定义是:
'use strict';
import Auth from './Auth';
export default class Oauth1 extends Auth {
getToken() {
console.log('Auth: ', Auth);
}
}
When running with babel-node index.js
I get the following error:
当使用babel-node index.js运行时,我收到以下错误:
TypeError: Super expression must either be null or a function, not undefined
TypeError:超级表达式必须为null或函数,而不是未定义
at _inherits (/repos/mine/test-app/Oauth1.js:1:14)
at /repos/mine/test-app/Oauth1.js:4:28
at Object.<anonymous> (/repos/mine/test-app/Oauth1.js:4:28)
at Module._compile (module.js:434:26)
at normalLoader (/usr/local/lib/node_modules/babel/node_modules/babel-core/lib/api/register/node.js:199:5)
at Object.require.extensions.(anonymous function) [as .js] (/usr/local/lib/node_modules/babel/node_modules/babel-core/lib/api/register/node.js:216:7)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
If I remove the extends
expression from the Oauth1 class it executes but then I am not getting the inheritance I want.
如果我从它执行的Oauth1类中删除extends表达式,但是我没有得到我想要的继承。
1 个解决方案
#1
3
Your issue has nothing to do with babel
. The real problem is that you have circular dependencies in your code.
你的问题与babel无关。真正的问题是你的代码中有循环依赖。
To resolve this issue you should remove Oauth1
dependency from its parent Auth
class:
要解决此问题,您应该从其父Auth类中删除Oauth1依赖项:
'use strict';
export default class Auth {
constructor(config) {
this.config = config;
}
getToken() {
console.log('Error: the getToken module must be implemented in the subclass');
}
}
'use strict';
import Auth from './Auth';
export default class Oauth1 extends Auth {
getToken() {
console.log('Auth: ', Auth);
}
}
If you don't want to remove this instanceof Auth
check from your base class, you could require
your Oauth1
subclass in run-time instead of importing it during module initialization:
如果您不想从基类中删除此Auth检查实例,则可能需要在运行时使用Oauth1子类,而不是在模块初始化期间导入它:
constructor(config) {
if (this instanceof Auth) {
let Oauth1 = require('./Oauth1');
return new Oauth1(config);
}
this.config = config;
}
#1
3
Your issue has nothing to do with babel
. The real problem is that you have circular dependencies in your code.
你的问题与babel无关。真正的问题是你的代码中有循环依赖。
To resolve this issue you should remove Oauth1
dependency from its parent Auth
class:
要解决此问题,您应该从其父Auth类中删除Oauth1依赖项:
'use strict';
export default class Auth {
constructor(config) {
this.config = config;
}
getToken() {
console.log('Error: the getToken module must be implemented in the subclass');
}
}
'use strict';
import Auth from './Auth';
export default class Oauth1 extends Auth {
getToken() {
console.log('Auth: ', Auth);
}
}
If you don't want to remove this instanceof Auth
check from your base class, you could require
your Oauth1
subclass in run-time instead of importing it during module initialization:
如果您不想从基类中删除此Auth检查实例,则可能需要在运行时使用Oauth1子类,而不是在模块初始化期间导入它:
constructor(config) {
if (this instanceof Auth) {
let Oauth1 = require('./Oauth1');
return new Oauth1(config);
}
this.config = config;
}