2. ..sometimes it can suck
• Cross Browser DOM incompatibilities (and surprisingly its not all IE’s fault)
• Ugly looking code (compared to some other languages *cough* ruby *cough*)
• Poorly written code
• Global Namespace
• Lives inside the browser (it doesn’t have to)
3. but..
• Most widely used functional programming language ever (eat your heart out
LISP)
• lambda’s FTW
• Objects!!! (and JSON)
• Metaprogramming goodness (think ruby)
• Duck typed
• Light and easy (pretty much the opposite of Java)
4. you too can make it suck less
Module Pattern
var Positioning = function(){
//private members
var _x = 0;
var _y = 0;
return {
//priviledged functions, have access to private members/functions
setPosition: function(x,y){
_x = x;
_y = y;
},
getPosition: function(){
return new Array(_x, _y);
}
}
}();
Positioning.setPosition(50, 100);
Positioning.getPosition(); // [50, 100]
6. prototype this
prototype inheritance
function Bar(){
this.member = initializer;
return this;
}
Bar.prototype.sayHello = function(){ alert quot;Hello I am Barquot;; }
var barObject = new Bar();
barObject.prototype == Bar.prototype
barObject.constructor == Bar()
barObject.sayHello() // alerts quot;Hello I am Barquot;
function Foo(){
this.member = initializer;
return this;
}
Foo.prototype = new Bar();
Foo.prototype.sayHello = function(){ alert quot;Hello I am Fooquot;; }
var fooObject = new Foo();
fooObject.sayHello() //alerts quot;Hello I am Fooquot;
7. no more new
function object(parentObject){
//create a dummy constructor function for our new object
function F(){};
// the dummy function's prototype member is now the parentObject
F.prototype = parentObject;
// return an object with the dummy function's prototype member
return new F();
}
var bar = {
sayHello: function(){...}
};
var foo = object(bar);
foo.sayHello() // alerts “Hello I am Bar”
8. hold your arguments to later please
Bar.prototype.setFavoriteDrinks = function(person) {
var drinks = Array.prototype.slice.apply(arguments, [1]);
alert(person + quot;'s favorite drinks are: quot; + drinks.join(', '));
}
var barCamp = new Bar()
// hint ill accept any of these as a thank you later tonight
barCamp.setFavoriteDrinks(quot;the dudequot;, quot;White Russionquot;, quot;Red Bull and Vodkaquot;,
quot;Irish Car Bombquot;, quot;Guinessquot;);
//alert quot;the dude's favorite drinks are White Russion, Red Bull and Vodka, Irish
Car Bomb, Guinessquot;