Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   помогите новичку! (https://javascript.ru/forum/node-js-io-js/83576-pomogite-novichku.html)

fxobject 15.01.2022 19:05

помогите новичку!
 
есть описание класса - ну очень уж большое.
как можно его покоцать по файлам?
class popandos{
function1(){} // в этом файле
function2(){} // в другом файле
}
причем нужно понимать что this у них при использовании един, и
возможны перекрестные вызовы....
можно конечно require. Но если за this можно уследить
то перекрестные вызовы членов класса - капец полный.
I need a help !!!

ksa 15.01.2022 21:26

Цитата:

Сообщение от fxobject
как можно его покоцать по файлам?

Да хоть бы вот так...
const test = require('./test')

class Tmp {
	
	constructor(name) {
		this.name = name
		this.test = test
	}
	home() {
		console.log(this.name)
	}
}

const o = new Tmp('Вася')
o.home()
o.test()

test.js
function test() {
	console.log(this.name)
}

module.exports = test

fxobject 15.01.2022 22:18

направление понятно
экспорт из test.js нужно делать не функцию, а структуру в которой ключам соответствуют функции (по причине того, что в файле test.js) может находится большее количество функций). Экспортировать их поименно и затем поименно присваивать все функции в конструкторе не совсем хорошая идея.
таким образом - каждый файл экспортирует все свои функции посредством структуры. Основной файл в конструкторе их присваивает внутри класса. При использовании при таком варианте немного изменится вызов. Он будет осуществляться не через this а this.test.func
Ну и ладно. В принципе перекрестные вызовы (если таких файлов несколько и нужно сделать вызов из test.js в test1.js) тоже могут быть осуществлены через this.
Остается еще один вопрос:
Этот класс родительский многим объектам. Там от sql до работы по нестандартным протоколам (много чего). Но все подобные модули собранные в этом классе реализованы в режиме возможной "одновременной работы". Т.е. при наличии незаконченного выполненного одного действия допускаются повторные вызовы.
При создании конечного объекта создаются множество других объектов всяких сокетов, sqэлев, телнетов и прочее. Конечный объект востребован каждый раз как поступает входящий запрос на некую операцию. Запросов таких много и поступают они асинхронно. Чтобы на каждый такой запрос не создавать монструальноый new - конечный класс создается как global.Myclass = new ....
Т.е. - один объект и его this глобальный.
Чтобы при таком подходе отделять данные разных запросов в точках входа обработки запроса создется new структура, она вначале может быть проинициализирована в зависимости от запроса и собственно она дальше и является this для всей цепочки работы. Передается она в виде первого параметра. Ну а this нигде не используется.
Так вот вопрос - можно ли каким то образом сделать эту структуру полноценным this. т.е. перенести в нее функционал класса (из prototype) и везде дальше обращаться к данным через this, С учетом того что объект глобальный и вызовы асинхронные
Спасибо

ksa 15.01.2022 22:25

Цитата:

Сообщение от fxobject
Экспортировать их поименно и затем поименно присваивать все функции в конструкторе не совсем хорошая идея.

Это называется пример. :D

Цитата:

Сообщение от fxobject
Этот класс родительский многим объектам.

Всегда предупреждали не делать "швейцарский нож"...

Цитата:

Сообщение от fxobject
можно ли каким то образом сделать эту структуру полноценным this. т.е. перенести в нее функционал класса (из prototype) и везде дальше обращаться к данным через this, С учетом того что объект глобальный и вызовы асинхронные

Прочитав твое пространное описание, можно так же пространно утверждать - если вы все сделаете правильно, таки да, это сделать можно. :D

Т.е. если у вас такое не будет получаться - значит что-то вы таки делали не правильно. :nono: :D

fxobject 15.01.2022 22:33

Цитата:

Сообщение от ksa (Сообщение 543023)
Это называется пример. :D
Всегда предупреждали не делать "швейцарский нож"...

Ну то, что Вы не сторонник ООП(проектирования) - это понятно
Цитата:

Сообщение от ksa (Сообщение 543023)
Прочитав твое пространное описание, можно так же пространно утверждать.......

Это просто вникать не хочется, называется - харит )))

ksa 15.01.2022 22:34

Цитата:

Сообщение от fxobject
экспорт из test.js нужно делать не функцию, а структуру в которой ключам соответствуют функции (по причине того, что в файле test.js) может находится большее количество функций).

У этого так же есть побочный эффект...
const Def = require('./test')

class Tmp {
	constructor(name) {
		this.name = name
		this.fn = Def
		this.fn.test = this.fn.test.bind(this)
	}
	home() {
		console.log(this.name)
	}
}

const o = new Tmp('Вася')
o.home()
o.fn.test()

test.js
const Def = {
	test: function (){
		console.log(this.name)
	}
}

module.exports = Def

fxobject 15.01.2022 22:36

про побочный эффект я написал при постановке вопроса. невнимательно читали. Закрываем тему. разберусь сам.

ksa 15.01.2022 22:37

Цитата:

Сообщение от fxobject
Ну то, что Вы не сторонник ООП(проектирования) - это понятно

Я сторонник простого и понятного. :D

Цитата:

Сообщение от fxobject
Это просто вникать не хочется, называется - харит )))

Твои проблемы - это только твои проблемы...
Я тут собираю проблемы таких как ты дабы потом так не делать и своим ребятам так делать не давать. ;)
Т.ч. и от таких как ты есть польза в работе.
Цитата:

Сообщение от fxobject
Закрываем тему. разберусь сам.

Удачи!

fxobject 15.01.2022 22:39

понятно, - СЭНСЭЙ.
бедные ребята

ksa 15.01.2022 22:40

Цитата:

Сообщение от fxobject
бедные ребята

Ты спец - тебе видней... :D


Часовой пояс GMT +3, время: 08:25.