Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.08.2018, 16:40
Новичок на форуме
Отправить личное сообщение для noomnau Посмотреть профиль Найти все сообщения от noomnau
 
Регистрация: 15.04.2016
Сообщений: 8

Сниппеты эволюции на основе JS (фантастические)
Ниже представлен материал о конструкциях, которые мы сможем использовать, когда реализуем их где-то. Рад буду обсудить их плюсы, минусы, варианты применения (их ожидаемое поведение). И будут шансы увидеть эти конструкции в том или ином скриптовом инструменте или расширении. Поехали.

Сразу предупреждаю вас о необходимости отодвинуться от холодильника подальше и контролировать желание бросить в меня помидор, которое обязательно возникнет, если вы тратили часы, изучая ECMAScript и особенно, если вы не большой любитель JS.
Не повторяйте увиденное, не забивайте себе голову, если вы в данный момент не разрабатываете свой язык программирования!

Что снится программисту который заботится о краткости и аккуратности кода? Фантастические сниппеты!
Упрощенные выражения заключающие в себе самую суть действия, содержащие меньше лишних синтаксических конструкций насколько возможно и невозможно.

>>(1) Множественное определение свойств ранее созданным объектам.
Широкое применение находит определение множества свойств объекта конструкцией следующего вида:
var mapItemSketch = {
             obj : nodes[i], 
             draggable : false
        };

Что эквивалентно следующей последовательной записи:
var mapItemSketch = {};
	mapItemSketch.obj = nodes[i];
	mapItemSketch.draggable = false;

Однако невозможным на данный момент является сперва определение пустого объекта, и последующее множественное определение его свойств в одной "фигурной конструкции" вида:
var mapItemSketch;
	mapItemSketch{obj : nodes[i], draggable : false};


***
>>(2) Циклическая функция
var m = for (let item of array, result=0 return result) result += item;
// m равен сумме элементов массива или 0 по умолчанию

В начале списка аргументов конструкции идет определение let или var, после всегда перебор перечисляемого объекта, такого как массив, после - объявление любых других переменных по умолчанию, в конце обязательно указание результирующей переменной которая пойдет в result.

Что эквивалентно рекурсивной функции и стрелочной рекурсивной функции.

***
>>(3) Вычисляемые сеттеры и геттеры случайных (то есть всех!) свойств.
В ES6 у нас появился вычисляемый сеттер с геттером:
{get prop() { ... } }
{get [expression]() { ... } }

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

Тут пригодится "случайный сеттер" со "случайным геттером". Сеттеру и геттеру определим переменную _prop, содержащую ссылку на то свойство с которым мы взаимодействуем, задавая или получая его значение.
Необходимо отделить обращение к случайным сеттеру и геттеру от обращения к самим свойствам экземпляра класса или объекта. Для этого можно, например, применять специальную команду usingRandomProperties() и endUsingRandomProperties(), которая явно сообщает о начале действия области применения обращений к свойствам объекта как к сеттерам или геттерам с такими же названиями.
{get () { return this._prop } }
{set (value) { .this._prop = value } }

В момент когда выполнение кода попадает внутрь геттера или сеттера, обращение к "оборачиваемым" свойствам отключается и мы получаем запись самого свойства объекта, а не "обертку"-случайный геттер или случайный сеттер свойства объекта.
Это чем-то напоминает Прокси.

***
>>(4) Самовызываемый объект на примере "return object"
let c = (b) ? b : null;
if(c === null) return;


Сократим к виду:
let c = (b)? b: return;


А также
"var b = return;"


В этой ситуации произойдет присвоение переменной b функции и вызов ее исполнения, например специального самовыполняемого объекта-функции с действием return, которое произведет возврат не из самой себя, а из той функции, где объект был вызван и присвоен и код дошел до его исполнения.

***
>>(5) Однозначный условный оператор
let c = ( typeof b  === "boolean" )? b;

В "противном случае" ветвления, переменная остается при своём значении, в данной ситуации при значении undefined.

***
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операционная Система на JS Icat Общие вопросы Javascript 3 17.04.2018 22:54
Вывыод контента через JS inet_boy Элементы интерфейса 0 18.11.2013 03:00
Не получается вставить код js в HTML garmoni Элементы интерфейса 3 05.09.2013 05:56
Вставка кода js с помощью js Alice Общие вопросы Javascript 1 12.06.2013 19:05