Я нашел этот виджет онлайн, который Я пытаюсь научиться писать в новейшем стиле 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
}
}