Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.03.2016, 20:05
Аспирант
Отправить личное сообщение для karden Посмотреть профиль Найти все сообщения от karden
 
Регистрация: 16.01.2016
Сообщений: 57

Работа с классами
Разбираюсь с классами.

Сделал такое (вроде все лишнее вычистил, может что лишнее удалил, но суть вопроса будет понятна):

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, чтобы не терять ссылку на нужный объект. Точно помню, что об этом была написана хорошая статья. Надо перечитать.

И, как следствие, если я правильно понимаю, то для того, чтобы можно было вызывать методы одной командой через "." я должен везде (во всех метода) возвращать ссылку на свой объект. Надо ли это делать в конструкторе?

Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 01.04.2016, 16:55
Аспирант
Отправить личное сообщение для karden Посмотреть профиль Найти все сообщения от karden
 
Регистрация: 16.01.2016
Сообщений: 57

Опять возникла проблема с асинхронностью...

В выше приведенном классе (он уже прилично подрос) есть две функции:

//внутри класса

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, соответсвенно, вторая функция не имеет данных для своих действий.

Как мне "тормознуть" выход из первой функции до ее реального завершения работы?

Спасибо.
Ответить с цитированием
  #3 (permalink)  
Старый 02.04.2016, 13:15
Аспирант
Посмотреть профиль Найти все сообщения от protoquest
 
Регистрация: 02.04.2016
Сообщений: 50

Сообщение от karden
that = this
это не конструкция, а костыль, для проброса из динамического вызова в лексическую область
Ответить с цитированием
  #4 (permalink)  
Старый 02.04.2016, 13:19
Аспирант
Посмотреть профиль Найти все сообщения от protoquest
 
Регистрация: 02.04.2016
Сообщений: 50

Сообщение от karden
Не могу понять где общее пространство переменных?
общее пространство -- цепочка прототипов. Чтобы всегда иметь к нему доступ используйте this в методах
Ответить с цитированием
  #5 (permalink)  
Старый 02.04.2016, 13:24
Аспирант
Посмотреть профиль Найти все сообщения от protoquest
 
Регистрация: 02.04.2016
Сообщений: 50

надо тут сказать, что классы реализованы криво, там в неймспейсах могут лежать только методы. Если хотите использовать свойства, не используйте сахар для классов, используйте new и Object.create. Вы от этого ничего не потеряете.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вакансия: Программист IOS, работа в офисе,г.Ростов-на-Дону Анна NikitaOnline Работа 0 21.03.2016 18:45
Работа с классами Navil Элементы интерфейса 2 11.02.2014 11:04
Постоянная работа / Front-end / Москва kooper Работа 4 29.09.2011 22:06