Понимание простой структуры виджета JavaScript и написание ее как класс ES6 - PullRequest
0 голосов
/ 12 сентября 2018

Я нашел этот виджет онлайн, который Я пытаюсь научиться писать в новейшем стиле ES6 . Javascript был уменьшен, но я думаю, что он изначально был написан на ES6.

Итак, основная структура выглядит так:

Some_config = {};

(function() {
    var t, e = function(t, e) {
            return function() {
                return t.apply(e, arguments)
            }
        },
        i = [].slice;
    t = function() {
        function t() {
            this.log = e(this.log, this);
            var t;
            t = "undefined" != typeof Some_config && null !== Some_config ? Some_config : {},
            "undefined" != typeof Some_config && null !== Some_config && this.init(t)
        }
        return t.prototype.pushMessage = function(t, e) {
            return null == e && (e = {}), this.elements.frame.contentWindow.postMessage([t, e], "*")
        },
        t.prototype.log = function() {
            if (this.localOptions.debug)
                return console.log("[Debug]", arguments)
        },
        t.prototype.warn = function(t) {
            return console.warn("[Error]", t)
        },
        t.prototype.init = function(t) {
            var e;
            try {
                this.nextInit(t)
            } catch (t) {
                e = t, this.warn(e)
            }
            return this
        },
        t.prototype.nextInit = function(t) {
            console.log('calling nextInit');
        },
        t
    }(), window.SomeApi = new t
}).call(this);

Итак, этот javascript запускается в браузере, поэтому выглядит так, будто он вызывается немедленно, но затем вызывает call(this). Что именно происходит в последних 2 строках?

   }(), window.SomeApi = new t
}).call(this); 

Стиль в целом выглядит очень чуждым для меня, потому что он был уменьшен по сравнению с оригинальным стилем ES6?

Если бы он был написан как класс ES6, как бы он выглядел по структуре? Я надеюсь, что он будет выглядеть чище, и мне будет легче учиться / строить из него.

class SomeApi {
    constructor() {

    }

    log() {
        if (this.localOptions.debug)
            return console.log("[Debug]", arguments)
    }

    init(t) {
        var e;
        try {
            this.nextInit(t)
        } catch (t) {
            e = t, this.warn(e)
        }
        return this
    }
}

1 Ответ

0 голосов
/ 12 сентября 2018

Я не думаю, что попытка вывести значение из минимизированного кода является очень эффективным способом работы с исходным кодом.

Однако эта статья может помочь вам

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator

Что здесь действительно происходит, так это то, что внешней переменной t присваивается возвращаемое значение IIFE, которое снова помечается как t.Затем анализатор движется дальше и просто присваивает глобальную переменную someApi новому t.Какой предыдущий внешний t называется конструктором.

Следующее также может быть полезно для разъяснения вещей:

Что такое конструкция (function () {}) () в JavaScript?

https://www.w3schools.com/js/js_function_call.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...