Расширение массива не удается в JavaScript ES6 - PullRequest
0 голосов
/ 05 апреля 2019

У меня проблемы с расширением массива JS. Это мои занятия:

// ArrayList.js
export default class ArrayList extends Array {
  clear() {
    this.splice(0, this.length);
  }
}

// MyItem.js
export default class MyItem {
  constructor() {
    this._id = 0;
  }

  getID() {
    return this._id;
  }

  setID(value) {
    if (typeof value === 'number') {
      this._id = value;
    }
  }
}

// Test.js
import ArrayList from './ArrayList';
import MyItem from './MyItem';

let list = new ArrayList();

let item1 = new MyItem();
item1.setID(1);
list.push(item1);

let item2 = new MyItem();
item2.setID(2);
list.push(item2);

Если я сейчас выполню:

list.forEach(function(item) {
  console.log(item.getID());
});

Все работает отлично, но если я пытаюсь вызвать свой собственный метод, я сталкиваюсь с ошибками:

list.clear();
console.log(list.length);

Исключение составляет:

TypeError: list.clear is not a function

+++ ОБНОВЛЕНИЕ +++

Я использую тестовый скрипт с node.js:

node start.js

Это мой start.js:

require('babel-register')({
    presets: [ 'env' ]
})
module.exports = require('./Test.js')

И затем каждый класс сохраняется в отдельном файле JS.

1 Ответ

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

Мне не нравится ваш экспорт и экспорт. Попробуйте модули (https://nodejs.org/api/modules.html), и это должно работать без Babel в Node.

module.exports =  class MyItem {
   // class content 
}

module.exports =  class ArrayList extends Array {
    clear() {
        this.splice(0, this.length);
    }
}

// in the test file
const ArrayList = require('./ArrayList');
const MyItem = require('./MyItem');


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...