Работа с классами
Разбираюсь с классами.
Сделал такое (вроде все лишнее вычистил, может что лишнее удалил, но суть вопроса будет понятна): var userData = {}; class inputUserData { constructor(settings) { var that = this; var initSettings = settings; if (initSettings.debugMode) { console.log('class inputUserData: constructor - Begin'); console.log('class inputUserData: settings %O', initSettings); } // Some code return (this); } // class inputUserData constructor setUserID (UserID) { if (initSettings.debugMode) console.log('class inputUserData: setUserID - Begin'); alert(UserID); // Работает alert (initSettings.appendPlace); // Не работает return (this); } // setUserID () } // class inputUserData var inputUserPhoneSettings = { appendPlace: 'inputUserPhone', debugMode: true }; let inputUserPhone = new inputUserData (inputUserPhoneSettings); HTML: <table width="100%"> <tr id="inputUserPhone"></tr> </table> $( "#..." ).click( function(){ inputUserPhone.setUserID(101); }); Собственно вопрос в следующем. Не могу понять где общее пространство переменных? Как их объявить в конструкторе, чтобы они были доступны из методов? И, заодно, не смог найти главу, где описывалась конструкция that = this, чтобы не терять ссылку на нужный объект. Точно помню, что об этом была написана хорошая статья. Надо перечитать. И, как следствие, если я правильно понимаю, то для того, чтобы можно было вызывать методы одной командой через "." я должен везде (во всех метода) возвращать ссылку на свой объект. Надо ли это делать в конструкторе? Спасибо. |
Опять возникла проблема с асинхронностью...
В выше приведенном классе (он уже прилично подрос) есть две функции: //внутри класса setUserID (UserID) { var self = this; userData = {}; $.ajax() .done(function( msg ) { userData = jQuery.parseJSON( msg ); // тут еще всякое... }); // ajax.done () return (self); } // setUserID () setCurrentValue (value) { var self = this; // рработа с userData return (self); } // setCurrentValue () // в основном коде inputUser.setUserID(1).setCurrentValue(2); Методы запускаются последовательно, но первая функция завершает работу раньше, чем завершился запрос ajax, соответсвенно, вторая функция не имеет данных для своих действий. Как мне "тормознуть" выход из первой функции до ее реального завершения работы? Спасибо. |
Цитата:
|
Цитата:
|
надо тут сказать, что классы реализованы криво, там в неймспейсах могут лежать только методы. Если хотите использовать свойства, не используйте сахар для классов, используйте new и Object.create. Вы от этого ничего не потеряете.
|
Часовой пояс GMT +3, время: 11:34. |