#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. Спасибо. Исправлено