ES6 импортирует расширенные классы - PullRequest
0 голосов
/ 05 июня 2018

Итак, я столкнулся с интересной проблемой, пытаясь расширить класс для использования в другом классе и затем импортировать его в другой файл.

'class-test.js':

export default class MyClass {
    constructor () {
        this.date_created = new Date()
        this.posts = new Posts()
    }
}
class Posts extends Array {
    add (val) {
        this.push(val)
    }
}

Затем, когда я создаю новый экземпляр MyClass в другом файле (и импортирую MyClass из class-test.js), свойство myClass.posts рассматривается только как массив и поэтому не имеетрасширенная функция add()

Мне кажется, проблема в том, что класс Posts не перемещается вместе с классом MyClass;но без приведения я понятия не имею, как сказать ему использовать этот класс.

Я особенно расстроен тем, что он отлично работает, если все в одном файле:

class MyClass {
	constructor () {
		this.date_created = new Date()
		this.posts = new Posts()
	}
}

class Posts extends Array {
	add (val) {
		this.push(val)
	}
}

var x = new MyClass('as', 'asd')
x.posts.add('asdf')
console.log(x.posts)
x.posts.add('qwer')
x.posts.add('zxcv')
console.log(x.posts)

1 Ответ

0 голосов
/ 11 июня 2018

Вы пытались экспортировать и импортировать оба класса?

'class-def.js':

class MyClass {
    constructor () {
        this.date_created = new Date()
        this.posts = new Posts()
    }
}

class Posts extends Array {
    add (val) {
        this.push(val)
    }
}

export { MyClass, Posts };

'class-test.js':

import { MyClass, Posts } from 'class-def.js';
var x = new MyClass('as', 'asd')
x.posts.add('asdf')
console.log(x.posts)
x.posts.add('qwer')
x.posts.add('zxcv')
console.log(x.posts)
...