19
Javascript - Avoiding the bad parts Mikko Ohtamaa [email protected] http://opensourcehacker.com http://twitter.com/moo9000 Saturday, November 5, 2011

Javascript - How to avoid the bad parts

Embed Size (px)

DESCRIPTION

A five minutes lighting talk presentation how to write Javascript by following the modern best practices and not in that crappy way when you where still studying web development circa HTML3.

Citation preview

Page 2: Javascript - How to avoid the bad parts

Lighting talk of 5 minTurn Python gurus to JS gurus

Plone Conference 2011

Saturday, November 5, 2011

Page 3: Javascript - How to avoid the bad parts

Javascript has become better

Don’t write Javascript like it was 1996

Saturday, November 5, 2011

Page 4: Javascript - How to avoid the bad parts

What your every JS file should look like

Saturday, November 5, 2011

Page 5: Javascript - How to avoid the bad parts

/*global require,define,window,console*/// Mainrequire(["jquery", "domready!", "submodule"], function($, domready, submodule) { "use strict";

$("a").click(function() { var val = submodule.foobar(); window.alert(val); });});

Saturday, November 5, 2011

Page 6: Javascript - How to avoid the bad parts

/*global require,define,window,console*/// Submoduledefine(["jquery", "myothermodule"], function($, myothermodule) { 'use strict';

// Export public module API return { foobar : function() { return 1+1+myothermodule.func(); } };});

Saturday, November 5, 2011

Page 7: Javascript - How to avoid the bad parts

Use require.js

• AMD (Asynchronous Module Definition)

• a.k.a. import for Javascript

• Dependency solving

• Automatic compression and merging of needed and only needed JS files using require.js optimizer

Saturday, November 5, 2011

Page 8: Javascript - How to avoid the bad parts

Use ECMAScript5

• Goodies: this.function.bind(), Array.forEach()

• Backwards compatibility (Internet Explorer): http://bit.ly/es5shim

Saturday, November 5, 2011

Page 9: Javascript - How to avoid the bad parts

“use strict”;

Enforces no global variables by default and fixes some other bad language features

Saturday, November 5, 2011

Page 10: Javascript - How to avoid the bad parts

Enforce background JSLint checking in your

text editor

... or JSLint modern fork, JSHint

Saturday, November 5, 2011

Page 11: Javascript - How to avoid the bad parts

Saturday, November 5, 2011

Page 12: Javascript - How to avoid the bad parts

// Some JSLint hinting

/*global window,console*/

Saturday, November 5, 2011

Page 13: Javascript - How to avoid the bad parts

Never use Javascript inline in HTML

Saturday, November 5, 2011

Page 14: Javascript - How to avoid the bad parts

<a href=”#” onclick=”aargh()”>

No

Saturday, November 5, 2011

Page 15: Javascript - How to avoid the bad parts

// On page load$("a#handler").click(function() { // do stuff });

// For dynamic content // (AJAX loaded)$("#handler").live(function() { // do stuff });

Saturday, November 5, 2011

Page 16: Javascript - How to avoid the bad parts

Passing a bound method to an event

handler using function.bind()

Saturday, November 5, 2011

Page 17: Javascript - How to avoid the bad parts

function FooClass(){ }FooClass.prototype.myfunc = function(arg1,arg2) { }var f = new Foo();

// Bind arguments are this, arg1, arg2setTimeout(f.myfunc.bind(f, "arg1", "arg2"), 10);

Saturday, November 5, 2011

Page 18: Javascript - How to avoid the bad parts

Finding Javascript info

• Use Mozilla Developer Network: “MDN Javascript bind”

• Put w3school.com on ban-list - only bad information there

Saturday, November 5, 2011

Page 19: Javascript - How to avoid the bad parts

Conclusion

• Worst JS farts have been fixed / can be worked around with discipline

• Javascript still lacks syntatic sugar, is not wrist friendly (boo!)

• Mozilla et. al. are working on to fix that (but Philip didn’t promise do drop curly brackets or semicolons)

Saturday, November 5, 2011