メニュー
ブログ更新履歴
コンテンツ更新履歴
リンク
  • Magome
  • クラウドベースのMIDIシーケンサ
    音楽制作に興味のある方を対象に、スタンドアロンでも使え、ネットならではの面白さも兼ね備えた音楽制作アプリの提供を目指しています。
twitter

TypeScript で、クラスのメンバ関数を、変数に入れる方法と、それをコールする方法です。
いわゆる メンバ関数ポインタ です。

メンバ関数を入れる変数の型は、普通の関数の場合と同じように、

	var func : (arg:number)=>string;

みたいな感じでOK。

コールするときは、

	func.call( クラス実体, 第1引数, 第2引数, ・・・ );

という風にします。

以下、自分への備忘録を兼ねたサンプルコードです。
参考になれば幸いです。

	class CUser
	{
		constructor( private m_name:string, private m_money:number ){
		}
		GetName( n : number ): string{
			return this.m_name;
		}
		GetMoney( n : number ): string{
			return (this.m_money + n).toString();
		}
	};

	const table : { [key: string]: (arg:number)=>string } = {	// "(arg:number)=>string" っていうのが関数の型
			"名前":		CUser.prototype.GetName,				// クラス名.ptorotype.メンバ関数名  ってする。
			"所持金":	CUser.prototype.GetMoney,				// クラス名.ptorotype.メンバ関数名  ってする。
		};

	const users : CUser[] = [ new CUser("一郎", 100 ), new CUser("二郎", 200 ), new CUser("三郎", 300 ) ];
	for( let userNo in users ){
		let s : string = `UserNo:${userNo} `;
		for( let key in table ){
			let t = table[key].call( users[userNo], 99 );	// オブジェクト.call() で第1引数に this となるオブジェクトを指定。第2引数以降に関数の引数を指定。
			s += `${key}は${t}。`;
		}
		console.log(s);
	}

	// 出力結果
	// > UserNo:0 名前は一郎。所持金は199。
	// > UserNo:1 名前は二郎。所持金は299。
	// > UserNo:2 名前は三郎。所持金は399。

Front page   Unfreeze Diff Backup Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 1937, today: 2, yesterday: 0
Princeps date: 2016-08-24 (Wed) 18:35:53
Last-modified: 2016-08-24 (Wed) 18:44:55 (JST) (1090d) by takatsuka