by shigemk2

当面は技術的なことしか書かない

JavaScript Ninjaの極意 4 オブジェクト

関数はプロパティを持つことが出来、メソッドを持つことが出来、変数やプロパティに
代入することができるが、「呼び出すことが出来る」という特殊能力ももつ。

<!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>