SlideShare a Scribd company logo
Metaprogramming
   JavaScript
 Dan Webb (dan@danwebb.net)
What?


“   the writing of computer programs
    that write or manipulate other
    programs (or themselves) as their
    data”
With JavaScript?!
★ Small and fiesty but widely misunderstood
★ Relies on few but powerful constructs
★ You can work with functions, arguments,
  built-ins types and mechanisms like
  inheritance at runtime
★ Techniques underpin many JS libraries
JavaScript Exposed:
  Objects Out Of
     Control!
Play along!
4 building blocks
(Nearly) everything
     is a hash
number
  string
 boolean
undefined
everything else is an
     Object
Metaprogramming  JavaScript
This works with
  any object
Metaprogramming  JavaScript
Expandos: a special case
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Inspecting objects
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Inspecting types
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Wha?!
Metaprogramming  JavaScript
First typeof
then instanceof
Functions are Objects
Metaprogramming  JavaScript
'Methods' are just
  functions that are
assigned to a property
      of an object
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Metaprogramming  JavaScript
arguments
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Functions can return
  other functions
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Closure
Back to wikipedia...



“
    A closure occurs when a function
    is defined within another function,
    and the inner function refers to
    local variables of the outer
    function.
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Why is that useful?
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Functions can be used
   to make objects
Metaprogramming  JavaScript
Constructor functions
  are just functions
The magic is in
the new operator
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Metaprogramming  JavaScript
inheritance
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Metaprogramming  JavaScript
The point is:
 its all just functions,
objects and properties
We can hack it all.
So what can you do
  with this stuff?
Patch holes in
bad implementations
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Self optimising code
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Pretty APIs
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Domain Specific
  Languages
DOMBuilder
http://danwebb.net/lowpro
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Metaprogramming  JavaScript
DIY language features
John Resig's method
      overloading
http://ejohn.org/blog/javascript-method-overloading/
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Metaprogramming  JavaScript
Prototype 1.6 Classes
 http://prototypejs.org/learn/class-inheritance
Metaprogramming  JavaScript
Metaprogramming  JavaScript
and a lot more...
Looking back...
★ JavaScript is small but totally flexible
★ A handful of techniques provide everything
  you need
★ It's all about objects, properties and
  functions
★ Don't worry if its not all sunk in. Have a
  play around. Slides will be available.
Coming Soon...

More Related Content

Metaprogramming JavaScript