Storing a collection of unique functions
from jquery ninja book
by dandoyon
HTML
<ul id="results"></ul>
CSS
#results li.pass { color: green; }
#results li.fail { color: red; }
JavaScript
function assert(value, desc) {
var li = document.createElement("li");
li.className = value ? "pass" : "fail";
li.appendChild(document.createTextNode(desc));
document.getElementById("results").appendChild(li);
}
var store = {
nextId: 1,
cache: {},
add: function(fn) {
if (!fn.id) {
fn.id = store.nextId++;
return !!(store.cache[fn.id] = fn);
// !! gets truthy/falsy value even from functions
}
return false; // was implicitly done in book
}
};
function ninja() {}
assert(store.add(ninja), "Function was safely added.");
assert(!store.add(ninja), "But it was only added once.");