title: TypeError: this[(("_" + (intermediate value)) + "_listener")] is not a function
body: <p>I'm dynamically building an object that will have a sender on it:</p>
  
  <pre><code>var coins = {};
  
  ['USD','EUR'].forEach((product_id) =&gt; {
      coins[`_${product_id}`] = {};
      coins[`_${product_id}_listener`] = (val) =&gt; {
          log.info(process.pid, 'terminal send', product_id, [`_${product_id}`]);
          terminal.send({
              action: product_id,
              data: this[`_${product_id}`],
              timestamp: new Date,
          });
      };
  
      Object.defineProperty(coins, product_id, {
          set: (val) =&gt; {
              this[`_${product_id}`] = val;
              this[`_${product_id}_listener`](val);
          },
          get: (val) =&gt; {
              return this[`_${product_id}`];
          },
      });
  });
  </code></pre>
  
  <p>Unfortunately, when I set a coin to something ...</p>
  
  <pre><code>coins['USD'] = {a: 4};
  </code></pre>
  
  <p>I get an error:</p>
  
  <pre><code>TypeError: this[(("_" + (intermediate value)) + "_listener")] is not a function
  at Object.set (repl:15:32)
  at repl:1:18
  at sigintHandlersWrap (vm.js:22:35)
  at sigintHandlersWrap (vm.js:73:12)
  at ContextifyScript.Script.runInThisContext (vm.js:21:12)
  at REPLServer.defaultEval (repl.js:340:29)
  at bound (domain.js:280:14)
  at REPLServer.runBound [as eval] (domain.js:293:12)
  at REPLServer.&lt;anonymous&gt; (repl.js:538:10)
  at emitOne (events.js:101:20)
  </code></pre>
  
  <p>This is obviously referring to the second line of the setter, but I'm not sure why. If I comment that out, gets and sets work fine. My listener just doesn't fire ... obviously. The goal here is to get the listener to fire.</p>
  
  <h1>Follow up</h1>
  
  <p>I've also noticed, with that line commented out, that the object doesn't look <em>right</em> (imo):</p>
  
  <pre><code>&gt; coins['USD'] = {a: 4};
  { a: 4 }
  &gt; coins
  { _USD: {},
    _USD_listener: [Function],
    _EUR: {},
    _EUR_listener: [Function] }
  &gt; coins['_USD']
  {}
  &gt; coins['USD']
  { a: 4 }
  </code></pre>
  
  <p>Since my setter is <em>supposively</em> setting <code>_USD</code>, why doesn't <code>_USD</code> look set when I print out <code>coins</code>?</p>