ふと自分で確認

単純ないわゆるクロージャー?

function hello ( str ) {
  return function ( e ) {
    return alert ( str );
  };
}
var start = hello ('Oh! MZ');
document.getElementById ('Test').addEventListener ('click', start, false);

new を使わない奴

var hello = function ( str ) {
  str = str ? str: this.mess;
  return function (e) {
    return alert( str );
  }
};

var mess = { mess:'Oh! 98' };
var start = hello.call( mess );
document.getElementById('Test').addEventListener('click', start, false );

一旦、that に移して、いわゆるクロージャーを返す?

function Hello (value){
  this.value = value ? value : 'Hello, World!';
}

Hello.prototype.createHandler = function ( ) {
  var that = this;
  return function (event) { alert(that.value); }
};


var world = new Hello();
var start = world.createHandler();

document.getElementById('Test').addEventListener('click', start, false);

クロージャーを返す関数ではなく・・・そのもの

function Hello (value){
  var that = this;
  this.value = value ? value : 'Hello, World!';
  this.handler = function (event) { alert(that.value); };
}


var world = new Hello();
var start = world.handler;

document.getElementById('Test').addEventListener('click', start, false);

馬鹿の一つ覚え。いつもこれが骨格。

function Hello (str) {
  this.value = str ? str : 'Hello, World!';
}

Hello.prototype.start = function ( e ) {
  return alert( this.value );
};


Hello.create = function ( id, str ) {
  this.stock[ id ] = new Hello ( str );
};


Hello.stock = [ ];

Hello.listener = function (e) {
  var id = e.target.id;
  var obj;
  if( obj = Hello.stock[id] )
    obj.start(e);
};

document.getElementById('Test').addEventListener('click', Hello.listener, false);

var world = Hello.create( 'Test', 'Oh! FM' );