title: Parameters coming from nowhere
body: <pre><code>var streams = require('stream');
  var util = require('util');
  util.inherits(JSONObjectStream, streams.Transform);
  
  function JSONObjectStream(opt){
      streams.Transform.call(this, opt);
  }
  
  JSONObjectStream.prototype._transform = function(data, encoding, callback){
      object = data ? JSON.parse(data.toString()) : "";
      this.emit("object", object);
      object.handled = true;
      this.push(JSON.stringify(object));
      callback();
  };
  
  JSONObjectStream.prototype._flush = function(cb){
      cb();
  };
  
  var tc = new JSONObjectStream();
  
  tc.on("object", function(object){
      console.log("Name: %s", object.name);
      console.log("Color: %s", object.color);
  });
  
  tc.on("data", function(data){
      console.log("Data: %s", data.toString());
  });
  
  tc.write('{"name": "Carolinus", "color": "Green"}');
  tc.write('{"name": "Solarius", "color": "Blue"}');
  </code></pre>
  
  <p>I have a bunch questions about the code above. I've tested it out, and it does work perfectly.</p>
  
  <p>First question: 
       How does the "opt" parameter get its value in the function JSONObjectStream(opt)? I do not see any value being passed when I create the "tc" object.</p>
  
  <p>Second Question: 
       When I prototype the transform method, from where does the "callback" parameter receive its value? I do not see a value being passed to it when I call the method with tc.write().</p>
  
  <p>Third Question:
       What is the flush() method's use in this program? I do not see it being called anywhere in the code. And if it is called somewhere, from where its "cb" parameter receive its value?</p>
  
  <p>Fourth Question: 
       How is the variable "object" able to be declared? It doesn't has neither a var nor a this before it.</p>
  
  <p>I got this code from a book, but I can't figure out how it works.</p>
  
  <p>Thanks for taking your time to check it out!</p>