ふと自分で確認
単純ないわゆるクロージャー?
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' );