child.js
class Child {
constructor(){
this.helloWorld = "Hello World";
}
run() {
}
}
export default new Child();
parent.js
import child from './child.js';
class Parent {
constructor() {
this.child = child;
}
}
export default new Parent();
index.js
import parent from './parent.js'
console.log(parent.child.helloWorld); <-- does not throws an error, displays "Hello World"
console.log(parent.child.run); <-- throws an error (Cannot read property run from undefined)
console.log(parent.child.run()); <-- throws an error (Cannot read property run from undefined)
如果我在index.js中执行console.log(parent.child),则运行不会显示,但属性helloWorld会执行..
我怎样才能公开这些功能?我希望能够做到这一点,以帮助我的代码更有条理,所以将它分成单独的类,以帮助最小化每个文件中的代码量。
答案 0 :(得分:1)
从一开始就明确一件事:您似乎得到的错误与run
输出中未显示的console.log
无关。
如果您的代码确实抛出了该错误,那么这意味着parent.child
的值为undefined
。因此,当您致电console.log(parent.child)
时,您应该看到undefined
,而不是对象。但是,我不知道你为什么会收到这个错误。
无论如何,run
在parent.child
的原型上定义,而不是自身。 console.log
最有可能显示对象的拥有属性(控制台API未标准化,因此结果可能因环境而异)。 那是正常的。
重现的简单示例:
var foo = {
x: 42
};
var bar = Object.create(foo);
bar.y = 21;
console.log(bar, bar.x, bar.y);
// Open the browser console to see output
&#13;
即使
bar.x
没有显示,也可以访问 console.log
(至少在Chrome中)。
答案 1 :(得分:0)
嗯,我不确定是否可以帮助您解决问题,但每当我想添加继承时,我使用extends
和super
就是一个例子:
基类:
class BaseDataModel {
constructor() {
}
getModel() {
return 'model';
}
module.exports.BaseDataModel = BaseDataModel;
类扩展基类:
"use strict"
// Imports
const BaseDataModel = require('../baseDataModel').BaseDataModel; // use the proper location
class UserMembershipModel extends BaseDataModel {
constructor() {
super(); // this is optional, I use this to inherit the constructors
}
getChildModel() {
return super.getModel(); // This is how you access the function from your extended class
}
module.exports.UserMembershipModel = UserMembershipModel;
同样,不确定它是否解决了您的问题,因为您实际添加了具有Child类的属性。我的示例实际上是扩展(或UserMembershipModel继承自BaseDataModel)。
希望这对你有所帮助。