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。
Page Info | |
---|---|
Page Name : | 技術系備忘録/TypeScript/メンバ関数ポインタ |
Page aliases : | None |
Page owner : | takatsuka |
Can Read | |
Groups : | All visitors |
Users : | All visitors |
Can Edit | |
Groups : | No one |
Users : | No one |
Counter: 6176,
today: 1,
yesterday: 1
Princeps date: 2016-08-24 (Wed) 18:35:53
Last-modified: 2016-08-24 (Wed) 18:44:55 (JST) (3032d) by takatsuka