Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 02.07.2017, 16:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Rise,
у ТС изначально один вопрос можно вытащить сеттер да/нет, если да то как?
Ответить с цитированием
  #12 (permalink)  
Старый 02.07.2017, 16:53
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

Что нужно сделать, чтобы реализовать именно такой синтаксис? :
var txt = Elem.textContent;

alert(txt) // 'Lorem';

// ... код в 50 строк ...

txt = 'Ipsum'; // 'Lorem -> Ipsum'

// ... еще код в 1000 строк ...

txt = 'Dolor'; // 'Ipsum -> Dolor'


Может нужно слушать window, и когда происходит обращение к переменной txt, изменять содержимое элемента.
Изначально я хотел это реализоавть используя Object.observe(),
но его как назло забросили (

Можно ли как-то сразу начать отслеживание объекта window при загрузке страницы?
Похоже этот синтаксис нереален в Javascript
Ответить с цитированием
  #13 (permalink)  
Старый 02.07.2017, 17:06
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

Rise,
Что угодно, кроме действий, которые сделают Elem не доступным в переменной txt.

Кроме того, переменную txt нужно жестко привязать именно к Elem.
И запретить присвоение переменной чего-либо, кроме СТРОКИ.
Ответить с цитированием
  #14 (permalink)  
Старый 02.07.2017, 17:14
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

Хотя бы теоретически можно реализовать синтаксис в посте #16?

Для меня главный вопрос сейчас не в том будет ли виснуть мой браузер, на моей тестовой страничке, а можно ли реализовать синтаксис?
Ответить с цитированием
  #15 (permalink)  
Старый 02.07.2017, 18:48
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Может нужно слушать window, и когда происходит обращение к переменной txt, изменять содержимое элемента.

Почему бы для этого не подошёл сеттер, определённый у объекта window?
//там, где у Вас в посте №16, строка 1, я предлагаю заменить на:
Object.defineProperty(self, "txt", {
	set: function(value) {
		Elem.textContent = value;
	}
});

Не знаю, по какой причине игнорируете такой способ, хотя с производительностью у него всё в порядке.

Ещё один способ...
window = new Proxy(window, {
	set: function(object, property, value) {
		object[property] = value;
		
		if(property === "txt") {
			Elem.textContent = value;
		}
	}
});

...который на самом деле не работает!

Вы хотите сделать txt = "lorem";, но переменной присвоен не сам сеттер, а то что он возвратил. Даже если там был бы сеттер, присвоив переменной новое значение, вы бы его просто переопределили, поскольку это функция.

Кстати почему вместо переменной txt не использовать функцию txt... И тогда вместо txt = `lorem`; будет просто txt `lorem`;. Ещё меньше символов...

Изменённый код из поста №16
var txt = function(value) { return "0" in arguments ? Elem.textContent = value : Elem.textContent; };

alert(txt()) // 'Lorem';

// ... код в 50 строк ...

txt `Ipsum`; // 'Lorem -> Ipsum'

// ... еще код в 1000 строк ...

txt `Dolor`; // 'Ipsum -> Dolor'
Ответить с цитированием
  #16 (permalink)  
Старый 02.07.2017, 21:16
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

Malleys,
спасибо!
По поводу txt`Ipsum`
Тоже думал об этом, но как бы традиционно и естественнее присваивать значение через знак равенства.
txt - это, конечно, хорошо, но вдруг мне понадобится получить текст другого элемента и придумать для него новую переменную, нап. "note".
Мне придется сделать еще одну функцию для ее обработки,
хотя в Javascript можно создать класс для этого и наследовать поведение.

Последний раз редактировалось Teamur, 02.07.2017 в 22:08.
Ответить с цитированием
  #17 (permalink)  
Старый 02.07.2017, 21:23
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 458

Сообщение от Teamur
можно реализовать синтаксис в посте #16?
Можно
Node.prototype.bind = function (variable, property, type) {
	var node = this;
	Object.defineProperty(window, variable, {
		get: function () {
			return node[property];
		},
		set: function (value) {
			if (typeof value == type) node[property] = value;
		},
		configurable: true
	});
};

// ...
elem.bind('txt', 'textContent', 'string');
// ...
txt = 'Ipsum';
// ...
txt = 'Dolor';
// ...
delete txt;
// txt is not defined
Ответить с цитированием
  #18 (permalink)  
Старый 02.07.2017, 22:15
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

Rise,
супер, наконец-то что-то похожее, я ковырялся с этой задачей недели две!
спасибо, мужики!
Ответить с цитированием
  #19 (permalink)  
Старый 02.07.2017, 22:18
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

Если на волне вдохновения будут еще какие-то идеи реализации, пожалуйста напишите и их.
Тема от этого только выиграет и будет интереснее и весомее!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как добавить значение для переменной Nezumi.May Общие вопросы Javascript 4 18.03.2017 20:11
Как вставить значение переменной из списка внутри скрипта zoldiar Общие вопросы Javascript 9 18.11.2016 09:54
Как получить значение переменной из игры на HTML5? Dimaz Общие вопросы Javascript 6 10.08.2014 16:27
Как ajax запрос присвоить переменной zeraid jQuery 23 08.03.2013 12:48
Присвоить значение ID переменной. Treekci Общие вопросы Javascript 7 18.03.2009 13:06