<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">
	<channel>
		<title>Learn JavaScript by Building Your Own JQuery | Infinum</title>
		<atom:link href="https://infinum.com/blog/learn-javascript-by-building-your-own-jquery/feed/" rel="self" type="application/rss+xml" />
		<link>https://infinum.com/blog/learn-javascript-by-building-your-own-jquery/</link>
		<description>Building digital products</description>
		<lastBuildDate>Fri, 03 Apr 2026 12:58:20 +0000</lastBuildDate>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>

					<item>
				<image>
					<url>8005https://infinum.com/uploads/2015/07/learn-javascript-by-building-your-own-jquery-0.webp</url>
				</image>
				<title>Learn JavaScript by Building Your Own JQuery</title>
				<link>https://infinum.com/blog/learn-javascript-by-building-your-own-jquery/</link>
				<pubDate>Thu, 09 Jul 2015 00:10:00 +0000</pubDate>
				<dc:creator>Mihael Šafarić</dc:creator>
				<guid isPermaLink="false">https://infinum.com/the-capsized-eight/learn-javascript-by-building-your-own-jquery/</guid>
				<description>
					<![CDATA[<p>LearnQuery will launch you on a wild adventure where you will learn how to use JS swords. Swords? Yeah, swords! You&#8217;ll find them, believe me.</p>
<p>The post <a href="https://infinum.com/blog/learn-javascript-by-building-your-own-jquery/">Learn JavaScript by Building Your Own JQuery</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</description>
				<content:encoded>
					<![CDATA[<div
	class="wrapper"
	data-id="es-197"
	 data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-blog-content js-block-blog-content">
	
<div class="block-blog-content-sidebar" data-id="es-92">
	</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-95"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-93">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-94'
	>
	So you heard that JavaScript is the best programming language and you’ve decided to become a JavaScript Warrior? LearnQuery will launch you on a wild adventure where you will learn how to use JS swords. Swords? Yeah, swords! You’ll find them, believe me. It’s an adventure after all.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-98"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-96">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-97'
	>
	Maybe you’ve wanted to learn JavaScript but have only had bad experiences with simple tutorials that you complete without putting much thought into and that don’t end up teaching you anything except syntax? If this is the case – you’re in the right place.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-101"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-99">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-100'
	>
	The story is this – we wanted to train new JavaScript developers in the best possible manner. We wanted a <strong>standard learning path</strong> to learn quality JavaScript development. We looked around, couldn’t find a solution for our problem – and so decided to scratch our own itch and create one ourselves.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-104"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-102">
	<h2	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-103'
	>
	Everybody knows jQuery</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-107"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-105">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-106'
	>
	If you’re a web developer, chances are you’re familiar with jQuery. Most developers know how to use the popular library, but a very small fraction of them know <strong>how jQuery really works internally</strong>. This was our starting point – to teach JavaScript and jQuery at the same time. And so, <strong>learnQuery</strong> was born.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-110"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-108">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-109'
	>
	<a href="https://github.com/infinum/learnQuery">LearnQuery</a> is an open source learning exercise that teaches developers the basics of JavaScript by building their own jQuery clone.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-113"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-111"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-112">
	<picture class="image__picture block-media__image-picture">
								
			<source
				srcset=https://infinum.com/uploads/2015/07/learn-javascript-by-building-your-own-jquery-1-1400x755.webp				media='(max-width: 699px)'
				type=image/webp								height="755"
												width="1400"
				 />
												<img
					src="https://infinum.com/uploads/2015/07/learn-javascript-by-building-your-own-jquery-1.webp"
					class="image__img block-media__image-img"
					alt=""
										height="1035"
															width="1920"
										loading="lazy"
					 />
					</picture>

			<figcaption class="image__figcaption block-media__image-figcaption">
			 Welcome to the Infinum JavaScript team lad. Shall we begin?		</figcaption>
	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-116"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-114">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-115'
	>
	It was developed with the main objective of imparting a strong JavaScript foundation that allows simple and fast mastering of complicated JavaScript concepts. The final product is your own jQuery clone, with a subset of functionality that the actual jQuery has. The main purpose of completing this exercise is that afterwards you’ll have a pretty good impression of how jQuery works under the hood.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-119"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-117">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-118'
	>
	LearnQuery structure</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-122"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-120">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-121'
	>
	In order to successfully solve learnQuery, a student is expected to have a basic knowledge of programming.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-125"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-123">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-124'
	>
	LearnQuery is divided into a number of tasks and gradually introduces core JavaScript concepts. The tasks become more challenging as one progresses and by passing through them a student is forced to constantly acquire new knowledge that builds on what was learned in previous tasks.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-128"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-126">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-127'
	>
	Each task has its own folder with the following structure:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-130"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">    </span><span class="token" style="color: #005cc5;">00</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">example</span><span class="token">:</span><span class="token"> 
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #005cc5;">–</span><span class="token"> </span><span class="token" style="color: #005cc5;">spec</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #005cc5;">example</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">js</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #005cc5;">–</span><span class="token"> </span><span class="token" style="color: #005cc5;">src</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #005cc5;">example</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">js</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #005cc5;">runner</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">html</span><span class="token"> 
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-133"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-131">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-132'
	>
	The <strong>src</strong> folder contains a .js file in which a student must write a function to perform the requested task.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-136"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-134">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-135'
	>
	The <strong>spec</strong> folder contains a .js file which applies specs to the written function. Students are encouraged to write several specs on their own.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-139"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-137">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-138'
	>
	The specs are written using the <a href="http://jasmine.github.io/">Jasmine</a> framework for testing JavaScript code.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-142"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-140">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-141'
	>
	LearnQuery contains the following tasks:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-145"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-143">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-144'
	>
	<li>Simple selector</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-148"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-146">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-147'
	>
	<li>CSS manipulation</li><li>CSS class manipulation</li><li>DOM manipulation</li><li>AJAX request</li><li>Event listeners<ul><li>Additional event listener trigger</li><li>Event delegation</li></ul></li><li>Make learnQuery</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-151"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-149">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-150'
	>
	Solving learnQuery</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-154"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-152">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-153'
	>
	One example task of medium difficulty is provided, and has already been solved. This task introduces basic JavaScript concepts that are applied in subsequent tasks.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-157"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-155">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-156'
	>
	Tasks are described with very little or no text at all (just a function definition). Student’s functions must behave just like corresponding jQuery functions.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-160"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-158">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-159'
	>
	The goal is to encourage students to do research on their own. Additionally, a student can review the given specs, and from the test descriptions they should be able to deduce how a function should behave.<br>Jasmine syntax is obvious, so it’s easy to learn and specs are easy to read. For example:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-162"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-javascript github-light" data-language="javascript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">    </span><span class="token" style="color: #6f42c1;">it</span><span class="token">(</span><span class="token">’</span><span class="token" style="color: #24292e;">should</span><span class="token"> </span><span class="token" style="color: #24292e;">cover</span><span class="token"> </span><span class="token" style="color: #24292e;">small</span><span class="token"> </span><span class="token" style="color: #24292e;">numbers</span><span class="token">’</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #d73a49;">function</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">expect</span><span class="token">(</span><span class="token" style="color: #24292e;">fibonacciCalculator</span><span class="token">.</span><span class="token" style="color: #6f42c1;">compute</span><span class="token">(</span><span class="token" style="color: #005cc5;">0</span><span class="token">)</span><span class="token">)</span><span class="token">.</span><span class="token" style="color: #6f42c1;">toBe</span><span class="token">(</span><span class="token" style="color: #005cc5;">1</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">expect</span><span class="token">(</span><span class="token" style="color: #24292e;">fibonacciCalculator</span><span class="token">.</span><span class="token" style="color: #6f42c1;">compute</span><span class="token">(</span><span class="token" style="color: #005cc5;">1</span><span class="token">)</span><span class="token">)</span><span class="token">.</span><span class="token" style="color: #6f42c1;">toBe</span><span class="token">(</span><span class="token" style="color: #005cc5;">1</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-165"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-163">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-164'
	>
	Writing your own specs is an important task because it encourages you to think about the corner cases.<br>By writing specs, a student discovers his bugs and gets familiar with debugging (the best way to learn is from your mistakes).</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-168"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-166">
	<h2	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-167'
	>
	Mentorship</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-171"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-169">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-170'
	>
	LearnQuery can be solved without a help of a mentor, but internally, we assign a mentor to each student. A student writes his own specs which allows him to experience the full learnQuery potential. In the other words, a mentor is not necessary, but it’s recommended.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-174"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-172">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-173'
	>
	A mentor is a person who advises a student, teaches him good programming practices, and reviews his code. After a code review, a mentor will point out the flaws and/or propose a better solution.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-177"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-175">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-176'
	>
	A mentor covers the things that can’t be tested automatically, like, for example, code quality. Additionally, a mentor’s feedback will provide a student with valuable information that will help a student to progress rapidly from task to task.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-180"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-178">
	<h2	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-179'
	>
	Don’t give up</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-183"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-181">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-182'
	>
	Solving learnQuery will probably induce emotional highs and lows. You might require an entire day to solve a very simple task. This is not wasted time, however, because it will help you gain very valuable experience.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-186"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-184">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-185'
	>
	<strong>Please do not give up!!!</strong></p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-189"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-187">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-188'
	>
	We believe that in the end you will definitely feel the effort is worth it. Solving LearnQuery will probably take a beginner student about two weeks.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-192"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-190"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-191">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2015/07/learn-javascript-by-building-your-own-jquery-2.webp"
					class="image__img block-media__image-img"
					alt=""
										height="428"
															width="700"
										loading="lazy"
					 />
					</picture>

			<figcaption class="image__figcaption block-media__image-figcaption">
			 Influenced by: <a href="http://www.vikingcodeschool.com/posts/why-learning-to-code-is-so-damn-hard">Viking Code School Blog</a>		</figcaption>
	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-195"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-193">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-194'
	>
	LearnQuery is an open source project and is available on <a href="https://github.com/infinum/learnquery">GitHub</a>. </p></div>	</div>
</div>
</div>		</div>
	</div><p>The post <a href="https://infinum.com/blog/learn-javascript-by-building-your-own-jquery/">Learn JavaScript by Building Your Own JQuery</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</content:encoded>
			</item>
		
	</channel>
</rss>