関数はプロパティを持つことが出来、メソッドを持つことが出来、変数やプロパティに
代入することができるが、「呼び出すことが出来る」という特殊能力ももつ。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Listing 4.8</title> <script type="text/javascript" src="../scripts/assert.js"></script> <link href="../styles/assert.css" rel="stylesheet" type="text/css"> </head> <body> <script type="text/javascript"> var store = { nextId: 1, //#1 cache: {}, //#2 add: function(fn) { //#3 if (!fn.id) { //#3 fn.id = store.nextId++; //#3 return !!(store.cache[fn.id] = fn); //#3 } //#3 } }; function ninja(){} assert(store.add(ninja), //#4 "関数は安全に追加された。"); //#4 assert(store.add(ninja), //#4 "関数は安全に追加された。"); //#4 assert(!store.add(ninja), //#4 "ただし追加は一度だけ。"); //#4 </script> </body> </html>