Добрый вечер.
Пытаюсь динамически подгрузить ES6-класс из файла под названием
blur.js
. Код подгружающего файла:
function require(src,cb){
var script = document.createElement('script');
script.src = src;
document.documentElement.appendChild(script);
script.onload = script.onerror = function() {
if (!this.executed) { // выполнится только один раз
this.executed = true;
cb();
}
};
script.onreadystatechange = function() {
var self = this;
if (this.readyState == "complete" || this.readyState == "loaded") {
setTimeout(function() {
self.onload()
}, 0); // сохранить "this" для onload
}
};
}
require('/js/classes/blur.js',function() {
var Blur = new Blur();
Blur.sayHi("John"); // alert("Hi, "+{name});
});
Chrome говорит, что у Blur нет конструктора:
Uncaught TypeError: Blur is not a constructor
и указывает на строку с объявлением экземпляра класса. Ввожу в консоли ту же строку с объявлением - все отлично работает. Сделал вывод, что скрипт не загрузился на момент вызова колбека.
Это специфика onload или я что-то делаю не так?
UPDATE: Поставил интервал на 10 секунд. Все равно выдает ту же ошибку. Я подозреваю, что у callback-а другая область видимости? Или я ошибаюсь? В консоли, потому что, все прекрасно работает и через 1-2-3... секунды. Как можно завести этот код? Буду очень благодарен за наводки.