metaprogramming javascript -...

36
Metaprogramming JavaScript Dan Webb ([email protected] )

Upload: lamhuong

Post on 14-Feb-2018

229 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes

Metaprogramming JavaScript

Dan Webb ([email protected])

Page 2: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes

WARNINGCode.ahead();

Page 3: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes

Overview★ What is metaprogramming?

★ Why JavaScript?

★ What have we got to work with?

★ Real examples (from DOM Builder, Low Pro and Sumo)

Page 4: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes

Metaprogramming...

The writing of programs that write or manipulate other programs or themselves.“ ”

Page 5: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes

...JavaScript★ Vastly underrated

★ Perceived as a ‘dumb language’...actually dumb programmers

★ Very dynamic (Functional programming, prototype inheritance etc...)

★ The very nature of JavaScript makes metaprogramming very valuable...

Page 6: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes

Why?★ More usable APIs

★ Compact

★ Good clean fun

Page 7: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes

Metaprogramming Building Blocks

Page 8: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes

Everything* is a hash

* well, nearly everything

Page 9: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes
Page 10: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes

Functions can be used to create objects

Page 11: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes
Page 12: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes
Page 13: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes

Functions ARE objects

Page 14: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes
Page 15: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes
Page 16: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes

The arguments array

Page 17: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes
Page 18: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes
Page 19: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes

Functions remember the scope they were

created in

Page 20: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes
Page 21: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes

And if all else fails...eval()

Page 22: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes

then mix it all about...

Page 23: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes

Dynamic functions: DOMBuilder

Page 24: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes
Page 25: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes
Page 26: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes
Page 27: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes
Page 28: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes
Page 29: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes
Page 30: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes

Domain specific languages: Sumo

Page 31: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes
Page 32: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes
Page 33: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes

Dynamic ‘classes’: Low Pro

Page 34: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes
Page 35: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes
Page 36: Metaprogramming JavaScript - danwebb.netdanwebb.net/assets/2007/2/19/Metaprogramming_JavaScript.pdf · Metaprogramming JavaScript Dan Webb ... ★ The very nature of JavaScript makes

Wha!?!