Rise,
у ТС изначально один вопрос можно вытащить сеттер да/нет, если да то как? |
Что нужно сделать, чтобы реализовать именно такой синтаксис? :
var txt = Elem.textContent; alert(txt) // 'Lorem'; // ... код в 50 строк ... txt = 'Ipsum'; // 'Lorem -> Ipsum' // ... еще код в 1000 строк ... txt = 'Dolor'; // 'Ipsum -> Dolor' Может нужно слушать window, и когда происходит обращение к переменной txt, изменять содержимое элемента. Изначально я хотел это реализоавть используя Object.observe(), но его как назло забросили ( Можно ли как-то сразу начать отслеживание объекта window при загрузке страницы? Похоже этот синтаксис нереален в Javascript |
Rise,
Что угодно, кроме действий, которые сделают Elem не доступным в переменной txt. Кроме того, переменную txt нужно жестко привязать именно к Elem. И запретить присвоение переменной чего-либо, кроме СТРОКИ. |
Хотя бы теоретически можно реализовать синтаксис в посте #16?
Для меня главный вопрос сейчас не в том будет ли виснуть мой браузер, на моей тестовой страничке, а можно ли реализовать синтаксис? |
Может нужно слушать 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' |
Malleys,
спасибо! По поводу txt`Ipsum` Тоже думал об этом, но как бы традиционно и естественнее присваивать значение через знак равенства. txt - это, конечно, хорошо, но вдруг мне понадобится получить текст другого элемента и придумать для него новую переменную, нап. "note". Мне придется сделать еще одну функцию для ее обработки, хотя в Javascript можно создать класс для этого и наследовать поведение. |
Цитата:
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 |
Rise,
супер, наконец-то что-то похожее, я ковырялся с этой задачей недели две! спасибо, мужики! |
Если на волне вдохновения будут еще какие-то идеи реализации, пожалуйста напишите и их.
Тема от этого только выиграет и будет интереснее и весомее! |
Часовой пояс GMT +3, время: 15:32. |