Сниппеты эволюции на основе 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. *** |
Часовой пояс GMT +3, время: 10:55. |