Functions are almost objects
I was impressed! It seems that everything is clear and has long been known, but it never occurred to me.
Adapted from Secrets of JavaScript ninja by John Resig
var store = { id: 1, cache: {}, add: function (fn) { if (! fn.uuid) { fn.uuid = store.id ++; return !! (store.cache [fn.uuid] = fn); } } }; function ninja () {} assert (store.add (ninja), "Function was safely added."); assert (! store.add (ninja), "But it was only added once.");
Adapted from Secrets of JavaScript ninja by John Resig