当由另一个模块导入时,JavaScript对象原型中的函数未定义

时间:2019-04-11 23:00:05

标签: javascript inheritance es6-modules

我正在为一个项目设置JS模块,在该项目中,我正在使用原型进行OO编程(因为我不确定框架是否支持ES6类语法)。一个模块包含用于特定目的的“类”,另一个模块导入并使用这些类。

我仔细阅读了所有文档,了解如何正确设置JS原型的继承以及如何导出和导入模块。下面的代码示例说明了我要做什么。

MyModule.js:

function A(x, y) {
    this.x = x;
    this.y = y;
}

A.prototype.foo = function(bla) {
    // ...
}

function B(x, y, z) {
    A.call(this, x, y);
    this.z = z;
}

B.prototype = Object.create(A.prototype);
B.prototype.constructor = B;

export { B };

MainModule.js:

import * as MyModule from "./MyModule.js"

var b;

function bar() {
    b = new MyModule.B(1, 2, 3);

    b.foo(4); // <-- error happens here
}

当我尝试运行bar时,b.foo未定义。成员变量(例如b.z)可以正常工作,但添加到原型中的函数不能正常工作。

有人有什么想法吗?预先感谢!

2 个答案:

答案 0 :(得分:0)

看起来您正在使用es6语法,所以您可以做类似的事情

export function B(x, y, z) {
    A.call(this, x, y);
    this.z = z;
}

然后导入

import { B as MyModule } from "./MyModule.js"

或您想给它起的名字

答案 1 :(得分:0)

因此,事实证明Qt(我正在使用的是Qt)更喜欢ES6类语法来完成我试图做的事情。一旦切换到该位置,导入/导出和继承以及其他所有功能都将起作用。感谢所有发表评论的人,我现在可以将其标记为已解决。