Разделение класса ES6 на несколько файлов для импорта отдельных методов библиотеки

#javascript #class #inheritance #ecmascript-6 #prototype

#javascript #класс #наследование #ecmascript-6 #прототип

Вопрос:

Допустим, я создаю библиотечный класс для вспомогательных методов. У меня есть один файл, содержащий строковые утилиты, один файл, содержащий утилиты ajax и так далее.

Основной класс выглядит примерно так:

 // helperUtils.js
export class helperUtils {
  constructor() {}

  basicHelperFn() {
    return true;
  }
}
  

теперь у меня есть файл, экспортирующий эти строковые утилиты:

 // helperUtils/stringUtils.js
import { helperUtils } from '../helperUtils.js';

helperUtils.prototype = { 
  stringUtil1 : (str) => { 
    return str  = ' this is very helpful!';
  }
}

export const stringUtils = helperUtils.prototype;
  
 // more files...
// helperUtils/ajaxUtils.js
// helperUtils/objUtils.js
// ...
  

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

 import { helperUtils } from './helperUtils';
import { stringUtils} from './helperUtils/stringUtils';

const helper = new helperUtils();
helper.basicHelperFn();
helper.stringUtil1();
  

Ответ №1:

Что-то вроде этого?

 /*
 helperUtils/stringUtils.js 
*/
import { helperUtils } from '../helperUtils.js';

class StringUtils extends helperUtils {
    super();
    constructor() {}
    stringUtilNew(x) {
         /*
          Do somthing...
          */
         return x;
    }
}

export StringUtils;  

Комментарии:

1. разве super() не должен вызываться внутри конструктора или какого-либо другого метода? Кроме того, используя расширенные классы, я должен вызвать дочерний элемент для доступа к этим методам, верно?

Ответ №2:

Я немного поэкспериментировал:

Это то, что я сейчас придумал:

 // helperUtils/stringUtils.js
import { helperUtils } from '../helperUtils.js';

helperUtils.prototype.stringUtil1 = (str) => { 
    return str  = ' this is very helpful!';
}

export const stringUtils = helperUtils.prototype;
  

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

Если у кого-то есть лучшее решение, пожалуйста, поделитесь им с нами!

Пока спасибо!

Ответ №3:

Если ваш класс StringUtils расширяет класс helperUtils:

 // helperUtils/stringUtils.js
import { helperUtils } from '../helperUtils.js';

class StringUtils extends helperUtils {
    stringUtil1(str) {
         return str  = ' this is very helpful!';
    }
}

export StringUtils;
  

затем вы можете просто импортировать его и использовать.

Комментарии:

1. Это super() находится в неправильном месте, и как он, так и конструктор могут быть удалены.

2. Спасибо. Исправлено