1: 2016-08-24 (水) 18:35:53 takatsuka |
現: 2016-08-24 (水) 18:44:55 takatsuka |
- | 準備中 | + | #freeze |
| + | TypeScript で、クラスのメンバ関数を、変数に入れる方法と、それをコールする方法です。 |
| + | いわゆる メンバ関数ポインタ です。 |
| + | |
| + | メンバ関数を入れる変数の型は、普通の関数の場合と同じように、 |
| + | #prettify{{ |
| + | var func : (arg:number)=>string; |
| + | }} |
| + | みたいな感じでOK。 |
| + | |
| + | コールするときは、 |
| + | #prettify{{ |
| + | func.call( クラス実体, 第1引数, 第2引数, ・・・ ); |
| + | }} |
| + | という風にします。 |
| + | |
| + | 以下、自分への備忘録を兼ねたサンプルコードです。 |
| + | 参考になれば幸いです。 |
| + | |
| + | #prettify{{ |
| + | 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。 |
| + | }} |
Counter: 6143,
today: 1,
yesterday: 0