помогите новичку!
есть описание класса - ну очень уж большое.
как можно его покоцать по файлам? class popandos{ function1(){} // в этом файле function2(){} // в другом файле } причем нужно понимать что this у них при использовании един, и возможны перекрестные вызовы.... можно конечно require. Но если за this можно уследить то перекрестные вызовы членов класса - капец полный. I need a help !!! |
Цитата:
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 |
направление понятно
экспорт из 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, С учетом того что объект глобальный и вызовы асинхронные Спасибо |
Цитата:
Цитата:
Цитата:
Т.е. если у вас такое не будет получаться - значит что-то вы таки делали не правильно. :nono: :D |
Цитата:
Цитата:
|
Цитата:
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 |
про побочный эффект я написал при постановке вопроса. невнимательно читали. Закрываем тему. разберусь сам.
|
Цитата:
Цитата:
Я тут собираю проблемы таких как ты дабы потом так не делать и своим ребятам так делать не давать. ;) Т.ч. и от таких как ты есть польза в работе. Цитата:
|
понятно, - СЭНСЭЙ.
бедные ребята |
Цитата:
|
Часовой пояс GMT +3, время: 08:25. |