Damjan Vujnovic's Advanced JavaScript Workshop

Topics covered at ADV-JAVASCRIPT-01-03
View Schedule & Book More dates available

Next up:

Would you like to learn how to write great JavaScript code? Keen to learn how to employ JavaScript's fantastic features and avoid its pitfalls? Join Damjan Vujnovic for this Advanced JavaScript course and gain the skills to design, create and maintain rich web applications with JavaScript.

As Douglas Crockford once said, JavaScript is the world's most misunderstood programming language. It is also one of the world's most popular programming languages and the cornerstone of modern web application development.

In this course, we'll learn how to take advantage of JavaScript's functional and dynamic nature. You will gain an understanding of lexical scope and closure and you'll learn how to write your own object-oriented code, to apply asynchronous and event-driven patterns, and to use behaviours and stay unobtrusive.

Finally, you'll learn how to unit-test your code and how to avoid common pitfalls.

Learn how to:

  • Take advantage of JavaScript's functional and dynamic nature
  • Understand lexical scope and closure
  • Unit test JavaScript code
  • Write object-oriented code
  • Avoid (some) JavaScript quirks and common pitfalls
  • Apply asynchronous and event-driven patterns
  • Use behaviors and stay unobtrusive

What the community says

"Excellent course, one of the best ones I have been on in years."

Donal Spring on 4th Dec 2015

"Best teacher of any course I have been on. Really good how he challenged us when necessary but also made sure that nobody fell behind."

Cat Hawker on 9th Mar 2015

"I've been on a lot of technical courses, and this has been by far the best taught in both learning and teaching style."

William Lacy on 9th Mar 2015

"Thorough knowledge of the material. Very in-depth and challenging course."

November 2014 Attendee on 27th Nov 2014

"Damjan was a great teacher with superb domain knowledge. Enjoyed the course immensely. "

Paddy Gallagher on 27th Nov 2014

About the Author

Damjan Vujnovic

It all started at the age of 12, when the secrets of C=64 machine language ignited the passion for computer programming. Today, after more than 10 years of professional experience, the sheer excitement and pride of making a new technology "work" is still driving Damjan Vujnovic every day.

Introduction to unit testing (Jasmine)

JSLint (will hurt your feelings)


  • object literals
  • default & guard operators
  • updating properties & property attributes (eval/firebug gotcha)
  • prototype
  • property enumeration
  • delete operator


  • function object
  • declaration hoisting
  • literal
  • arguments
  • invocation (4 ways)
  • return
  • recursion


  • array literals
  • length & delete
  • for vs. for in
  • arrays vs. associative arrays
  • augmenting array prototype
  • multidimensional arrays


  • lexical scope
  • closure
  • revealing module pattern
  • bind
  • Global namespace pollution detection

Unit testing asynchronous code


  • inheritance (pseudoclassical, prototypal, functional)
  • mixins
  • overriding & super()

Asynchronous programming patterns

  • callback (asynchronous method)
  • promise/future (deferrable value)
  • observable


  • a few functional programming patterns (chaining, curry, memorization)
  • throttling
  • funneling

Advanced unit testing

  • test doubles (stubs, mocks, fake objects)
  • dom
  • tools

How does this all fit together (a component based micro-architecture featuring IOC, services & behaviours) - a small primer


If you are an experienced Web Developer and you want to learn how to design, create and maintain complex and modern rich web appiclations in JavaScript, this is the course for you!


This is an advanced JavaScript course: To benefit from this course, you should have some experience using JavaScript and be familiar with HTML, DOM, CSS and Ajax.

Prior exposure to a JavaScript/Ajax framework (like JQuery which is used in a few exercises) will be helpful but is not essential.

Bring your own hardware

To benefit most from this course, please bring your own laptop, so you can develop with your own tools and languages, rather than something you are not familiar with.

If you are not able to bring in your own laptop, please contact the Skills Matter team on +44 207 1839040 or email