Функции в прототипе объекта JavaScript не определены при импорте другим модулем - PullRequest
0 голосов
/ 12 апреля 2019

Я устанавливаю модули 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 голосов
/ 12 апреля 2019

Таким образом, получается, что Qt (что я и использовал) предпочитает синтаксис класса ES6 делать то, что я пытался сделать. Как только я переключился на это, импорт / экспорт, наследование и все остальное работало. Спасибо всем, кто прокомментировал, теперь я могу пометить это как решенное.

0 голосов
/ 12 апреля 2019

похоже, что вы используете синтаксис es6, чтобы вы могли просто сделать что-то вроде

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

затем импортировать

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

или любое другое имя, которое вы хотите дать

...