Как писать Толковый ООП код в JS? Всем доброго времени. Понимаю что вопрос глубокий но хотелось бы понять как писать годный код в ооп. Прогаю относительно недавно и при освоении ооп который должен был упростить код(как часто говорят на харбре))) вытоге уже сума меня сводить начал. Хотелось бы понимание в верном направлении я рою или нагромаздил черти че. Вот пример кода реализуещего на основе localStorage имитацию файловой системы для редактора. к нему еще несколько подобных фалов прилагается const ul = "ul";
const li = "li";
const explorerlist = "explorer-list";
const sublist = 'explorer-sublist-item';
const projects = "projects";
const $toolbar = $("", {
class: "explorer-toolbar"
});
$toolbar.append($("", {
class: "explorer-toolbar-btn material-icons",
title: "Create file",
"data-action": "file-new",
html: 'insert_drive_file'
}));
$toolbar.append($("", {
class: "explorer-toolbar-btn material-icons",
title: "Create folder",
"data-action": "folder-new",
html: 'create_new_folder'
}));
$toolbar.append($("", {
class: "explorer-toolbar-btn material-icons",
title: "Collapse all folders",
"data-action": "collapse-all",
html: 'indeterminate_check_box'
}));
$title = $("", {
"class": "explorer-input-wrapper"
}).append($("", {
"class": "explorer-input-field isBlured",
"type": 'text',
"data-action": "project-name",
"placeholder": "Project Name"
}));
class EXPLORER {
constructor() {
this.treeID = explorerlist;
this.p = {};
this.opened = {};
this.init()
}
init() {
let opened = Local.get("opened");
this.opened["project"] = opened["project"] || 0;
this.opened["files"] = opened.files || [];
Local.set("opened", this.opened);
}
get projects() {
var p = Local.get(projects);
for (var key in p) {
let n = p[key]["name"];
this.p[n] = p[key]
}
return Local.get(projects);
}
get Project() {
var _this = this;
return new class {
open(name) {
$title.attr("data-id", name).val(name);
for (let i = 0; i {
const _file = files.substring(files.indexOf("/") + 1);
_this.file_path[_file] = files
}, _this.file_path);
if (_this.opened["project"] !== "undefined") {
var code = Local.get("projects")[_this.opened.project].files[name];
Workspace.Editors(_this.file_path[name]).create(code[1], _this.file_path[name]);
Workspace.Editors(_this.file_path[name]).instance.setValue(code[0]);
filesArr.push(_this.file_path[name]);
Local.setKey("opened", "files", filesArr);
}
}
close(name) {
let filesArr = Local.getKey("opened", "files");
for (var i = 0; i ", {
class: explorerlist,
id: explorerlist
});
this.$explorer.append($toolbar, $title, this.$filetree);
event(this.$filetree, this);
for (let i = 0; i {
$(document).on('click touchend', elem, e => {
if ($(e.target).parent('li').hasClass(sublist)) {
$(e.target).parent('li').toggleClass('active');
}
if ($(e.target).parent('li').hasClass('explorer-file')) {
let elem = e.target,
str = '';
if (!elem && elem === this.$filetree) return
elem = $(e.target).parent().parent('li');
let dir = elem ? elem.children().text() : '';
str = `${str && dir ? `${dir}/` : dir}${str}`;
}
});
$(document).on('dblclick touchend', elem, e => {
if ($(e.target).parent().hasClass('explorer-file-item')) {
var name = $(e.target).text();
explorer.File.open(name);
}
});
$(document).on("change", $title, (e) => {
var projName = $(e.target).attr("data-id")
var projects = EXPLORER.projects;
for (var key in projects) {
if (projects[key]["name"] == projName) {
projects[key]["name"] = $(e.target).val();
Local.set(projects, projects)
}
}
});
}
function initMode(fileExtension) {
switch (fileExtension) {
case "html" || "xml":
return "htmlmixed";
case "js":
return "javascript";
case "css":
return "css";
}
}
function getFormat(text) {
return text.split(".").pop()
}
Если есть какие статейки на примете подкиньте плз. Те что нашел на харбре и мозиле весьма примитивны и не дают понго представления приминения сих принципов на практике

21 Авг 2019 в 06:57
152 +1
0
Ответы
1

Добрый день! Разберем ваш пример кода, чтобы понять, как его можно улучшить с точки зрения объектно-ориентированного программирования (ООП) на JavaScript.

Разделение на классы и методы.
В вашем коде уже есть класс EXPLORER, который содержит свойства и методы. Однако, можно разделить этот класс на более мелкие классы, например, Project и File, чтобы каждый класс отвечал за свою функциональность.

Использование приватных свойств и методов.
В JavaScript нет прямой поддержки приватных свойств и методов, но их можно эмулировать с помощью замыканий. Например, можно использовать конструкторы с замыканиями для создания "приватных" свойств и методов.

Использование наследования и интерфейсов.
В ООП важно использовать наследование и интерфейсы для повторного использования кода и упрощения архитектуры. Можно создать базовый класс FileSystem, от которого будут наследоваться классы Project и File.

Управление состоянием и обработка событий.
Для работы с состоянием приложения (открытые проекты, файлы и т.д.) можно использовать паттерн управления состоянием, например, Redux. Это позволит сделать код более чистым и предсказуемым.

Обработка ошибок и исключений.
Важно добавить обработку ошибок и исключений в код, чтобы при возникновении проблем приложение не "ломалось" и корректно обрабатывало ошибки.

Если вы хотите углубиться в принципы ООП на JavaScript, рекомендую изучить следующие статьи и материалы:

Официальная документация по ООП на Mozilla Developer Network (https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Object-oriented_JS)"JavaScript Patterns" Stoyan Stefanov"JavaScript: The Good Parts" Douglas Crockford

Надеюсь, эти советы помогут вам улучшить свой код и изучить принципы ООП на JavaScript. Если у вас есть конкретные вопросы или примеры кода, с удовольствием помогу ими поработать. Удачи в изучении программирования!

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 887 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир