Показать сообщение отдельно
  #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'
Ответить с цитированием