Я устанавливаю 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) работают нормально, но функции, добавленные в прототипы, не работают.

У кого-нибудь есть идеи? Заранее спасибо!

0
yah_nosh 12 Апр 2019 в 02:00

2 ответа

Лучший ответ

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

0
yah_nosh 12 Апр 2019 в 01:41

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

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

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

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

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

0
Michael Cacciano 11 Апр 2019 в 23:31