Вопрос по оптимизации скрипта

76
13 января 2018, 03:10

Здравствуйте!

Делаю функцию, которая поможет более удобно добавлять функции через Object.defineProperties().

Она помогает автоматически создать get, set, обёртку(чтоб функция не выполнялась автоматически через get), не писать объекты с параметрами (opt:{value:val})

И всё это, конечно, делается с помощью for(nm in vl){}

Цикл перебирает объект, передаваемый в функцию, гинерирует объекты с параметрами (обычно в качестве value выступает значение свойства nm, но если значение=объект, то проверяется, есть ли там свойства с именами параметров(на случай, если нужно их добавить, но не как параметры, то есть свойство isParam). Если есть, то ничего не генерируется, а просто добавляется в объект tmp, который после итерации добавляется через .defineProperties() )

вот код:

window.EX = function (f1, f2) {
        /**упрощение работы с get и set.
        возвращает {get:function(){return f1;},set:f2},
        если f2=true, то set:f1, если f2 нет, то set:undefined
         **/
        return {
            get: function () {
                return f1;
            },
            set: f2 === true ? f1 : f2 || undefined
        };
    };
EX.auto = function (f1, f2) {
        /**тоже упрощает работу с get и set.
        возвращает:
        если f2=setget, EX(f1,true)
        если f2=set, {set:f1}
        если f2=get, {get:function(){return f1;}}
        если f2=что-то-другое, {get:f1}
         **/
        switch (f2) {
        case "setget":
            return EX(f1, !!1);
        case "set":
            return {
                set: f1
            };
        case "get":
            return {
                get: function () {
                    return f1;
                }
            };
        default:
            return {
                get: f1
            }
        }
    };
Object.defineProperties(Object.prototype, {
        Ainit: {
            /**конструктор объектов.
            принимает объект и помещает его свойства в тот, на котором вызван Init.
            если объект содержит конструкции типа l:{set:...,get:...}(только как прямые потомки), то они будут использованы как get l или set l (isEnumerable,isConfigurable,isWritable).
            если свойство isParam установлено в false l:{isParam:false}, то все свойства будут приниматься НЕ как параметры свойствa l (enumerable,configurable,writable,get,set)
            также get и set можно создать, используя имя самой функции l:function get(){}-
            get - создаст get с обёрткой
            l:{
            get:function (){
            return get(){};
            }
            } - функция не будет выполняться сама
            set - создаст set
            setget - создаст set и get для одной функции
            auto- создаст get без обёртки функции(она выполнится сама при вызове get)
             **/
            enumerable: false,
            configurable: false,
            writable: false,
            value: function (vl) {
                var tmp = {};
                for (var nm in vl) {
                    var s = vl[nm] || {},
                    sn = s.name || "";
                    tmp[nm] = (!s.set && !s.get && !s.enumerable && !s.configurable && !s.writable && ["get","auto","setget","set"].indexOf(sn) === -1 && s.isParam !== true) || s.isParam === false ? {
                        enumerable: false,
                        configurable: true,
                        writable: true,
                        value: vl[nm]
                    }
                     : (s.constructor !== Function ? s : EX.auto(s, sn));
                }
                Object.defineProperties(this, tmp);
            }
        }
    });

Подскажите, как можно более-менее оптимизировать это всё

READ ALSO
Валидация поля регулярным выражением

Валидация поля регулярным выражением

Нужно реализовать валидацию для поляВ поле можно вводить только латинские буквы, дефис и пробел

81
Вывод данных через выбор даты

Вывод данных через выбор даты

Делаю биг-дату, которая содержит в себе данные за каждый деньТребуется на фронте вставить календарь, благодаря которому можно выбрать дату...

77
Вопрос про оптимизацию кода

Вопрос про оптимизацию кода

Сегодня попробовал google closureЗаметил, что цифры в условиях он ставит на первое место:

61
Алгоритм построения дерева JSON, зная id и parent id?

Алгоритм построения дерева JSON, зная id и parent id?

Есть массив объектов со значениями id и parent_id

76