Введение:
Я знаю, что "Как работает этот код?"вопросы типа не одобряются, и я буду выглядеть таким же умным, как кирпич, читающий «Солнце» за такой вопрос, но ... вот так.
Я пытаюсь понять создание прототипов в JavaScript, теперь этоне проблема, я понимаю основы структуры прототипов в том, что вы пишете функцию, а затем расширяете параметры этой функции с помощью прототипа.
(Да, прежде чем я получу пламя, у меня естьПрочитайте вики сообщества и посты на SO об этой конкретной теме, так что не просто напишите мне об этом, а также прочитайте заметки Джона Рейсга по этому вопросу, которые очень помогли (самый запутанный аспектпонимал this
и его методы ссылки на DOM.))
Но вот в чем дело:
Я написал простой парсер API дляSO API, который собирал бы разнообразные данные, я и моя первая попытка войти в JS, я разместил ссылку в чате SO JS, чтобы узнать, думают ли ониэто можно было бы сделать более эффективно, и @IvoWetzel предложил мне перейти на прототипированную оболочку для создания URL-запросов API, поэтому я посмотрел на нее, и он разместил этот пример кода на основе моего:
//API Handling for asynchronicity
function API(site, key, ...) {
this.site = site;
this.key = key;
this.schedule = new Scheduler(this);
}
API.prototype = {
lookup: function(resource, callback) {
// build the url etc here
this.request(url, callback);
},
request: function(url, callback) {
// build a request here and send it
request.on('finished', function() {
callback();
});
}
};
function Scheduler(api) {
return function(method, options, interval) {
var id = null;
function request() {
api[method](options...);
id = setTimeout(function() {
request();
}, interval);
}
return {
stop: function(attribute) {
clearTimeout(id);
}
}
}
}
Очевидно, этоне закончен и только оболочка, но, честно говоря, кроме функции API
в верхней части, я понятия не имею, как работает код, в частности lookup:
, request:
и как return function
можетбыть внутри другого с переменными, которые нигде не определены и даже не переданы ему!
А функция Scheduler
просто сбивает меня с толку ...
Вывод:
Итак, кто-то может объяснить простыми словами (подумайте, почему бы не положить гармошку в туалет 3-летнему ребенку), как приведенный выше код делает то же самое, что и код в мой репозиторий GitHub (строки 176-210, 243-245 и 277-365).
Примечание: я делаю это как упражнение по обучению JS, есливы говорите, используйте JQuery.parseJSON / libraryX. что бы я не скакалlp you:)
Спасибо всем!