Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.01.2022, 19:05
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 133

помогите новичку!
есть описание класса - ну очень уж большое.
как можно его покоцать по файлам?
class popandos{
function1(){} // в этом файле
function2(){} // в другом файле
}
причем нужно понимать что this у них при использовании един, и
возможны перекрестные вызовы....
можно конечно require. Но если за this можно уследить
то перекрестные вызовы членов класса - капец полный.
I need a help !!!
Ответить с цитированием
  #2 (permalink)  
Старый 15.01.2022, 21:26
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от 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
Ответить с цитированием
  #3 (permalink)  
Старый 15.01.2022, 22:18
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 133

направление понятно
экспорт из 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, С учетом того что объект глобальный и вызовы асинхронные
Спасибо
Ответить с цитированием
  #4 (permalink)  
Старый 15.01.2022, 22:25
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

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

Сообщение от fxobject
Этот класс родительский многим объектам.
Всегда предупреждали не делать "швейцарский нож"...

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

Т.е. если у вас такое не будет получаться - значит что-то вы таки делали не правильно.
Ответить с цитированием
  #5 (permalink)  
Старый 15.01.2022, 22:33
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 133

Сообщение от ksa Посмотреть сообщение
Это называется пример.
Всегда предупреждали не делать "швейцарский нож"...
Ну то, что Вы не сторонник ООП(проектирования) - это понятно
Сообщение от ksa Посмотреть сообщение
Прочитав твое пространное описание, можно так же пространно утверждать.......
Это просто вникать не хочется, называется - харит )))
Ответить с цитированием
  #6 (permalink)  
Старый 15.01.2022, 22:34
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от 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
Ответить с цитированием
  #7 (permalink)  
Старый 15.01.2022, 22:36
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 133

про побочный эффект я написал при постановке вопроса. невнимательно читали. Закрываем тему. разберусь сам.
Ответить с цитированием
  #8 (permalink)  
Старый 15.01.2022, 22:37
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

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

Сообщение от fxobject
Это просто вникать не хочется, называется - харит )))
Твои проблемы - это только твои проблемы...
Я тут собираю проблемы таких как ты дабы потом так не делать и своим ребятам так делать не давать.
Т.ч. и от таких как ты есть польза в работе.
Сообщение от fxobject
Закрываем тему. разберусь сам.
Удачи!
Ответить с цитированием
  #9 (permalink)  
Старый 15.01.2022, 22:39
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 133

понятно, - СЭНСЭЙ.
бедные ребята
Ответить с цитированием
  #10 (permalink)  
Старый 15.01.2022, 22:40
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от fxobject
бедные ребята
Ты спец - тебе видней...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите плис новичку в ajax urel AJAX и COMET 6 12.01.2013 21:36
Помогите новичку плиз!!!!!!!!!!!!! Юрий Манылов Общие вопросы Javascript 1 18.12.2012 11:37
Помогите новичку! Анатолий Саратовцев Events/DOM/Window 7 04.08.2012 17:46
Помогите новичку dmpol18 Я не знаю javascript 17 03.08.2012 02:47
Помогите новичку с выпадающим списком interest Элементы интерфейса 5 19.05.2010 13:15