1: 2016-03-10 (木) 10:05:17 njf |
現: 2016-03-12 (土) 20:05:08 njf |
| | | |
| class TestClass{ | | class TestClass{ |
- | prm1:number | + | prm1:number; |
| + | |
| constructor(arg:number){ | | constructor(arg:number){ |
| this.prm1 = arg; | | this.prm1 = arg; |
| alert(this.prm1 + "です"); | | alert(this.prm1 + "です"); |
| } | | } |
| + | |
| } | | } |
| + | |
| var testClass:TestClass = new TestClass(2); | | var testClass:TestClass = new TestClass(2); |
| + | |
| testClass.showNumber();//=>2です | | testClass.showNumber();//=>2です |
| | | |
| | | |
| class TestClass{ | | class TestClass{ |
- | prm1:number | + | prm1:number; |
| + | |
| constructor(arg:number){ | | constructor(arg:number){ |
| this.prm1 = arg; | | this.prm1 = arg; |
| alert(this.prm1 + "です"); | | alert(this.prm1 + "です"); |
| } | | } |
| + | |
| } | | } |
| + | |
| class TestExtended extends TestClass{ | | class TestExtended extends TestClass{ |
| + | |
| showNumber(){ | | showNumber(){ |
| this.prm1 ++; | | this.prm1 ++; |
| } | | } |
| } | | } |
| + | |
| + | |
| + | var testExtended:TestExtended = new TestExtended(2); |
| + | |
| + | testExtended.showNumber(); // => 3です |
| | | |
| + | *アクセス修飾子 [#e79aed65] |
| | | |
- | var testExtended:TestExtended = new TestExtended(2); | + | アクセス修飾子は「public」と「private」がある。省略したときはpublicが採用される。 |
| + | publicはどこからでもアクセス可能で、privateはそのクラスの中からのみアクセス可能。privateを指定すると継承したクラスからもアクセスできない。たとえば上の例で |
| | | |
- | testExtended.showNumber(); // => 3です | + | private prm1:number; |
| | | |
| + | とすると、継承したクラスでprm1にアクセスしているため、エラーが発生する。 |
| | | |
| + | **引数のアクセス修飾子 [#y3ce730b] |
| | | |
- | *アクセス修飾子 [#e79aed65] | + | アクセス修飾子をコンストラクタの引数で使うとクラスプロパティの初期化のシンタックスシュガーとなる。つまり |
| + | |
| + | class TestClass{ |
| + | |
| + | constructor(public prm1:number){ } |
| + | |
| + | } |
| + | |
| + | と |
| + | class TestClass{ |
| + | prm1:number; |
| + | |
| + | constructor(arg:number){ |
| + | this.prm1 = arg; |
| + | } |
| + | |
| + | は同じである。ただしコンストラクタ以外の引数でアクセス修飾子は使えない。 |
| + | |
| + | *アクセサー [#haa297e3] |
| + | getやsetといったアクセサーが使える。ただし、ECMAScript 5でないと対応していないため、コンパイル時に設定が必要。また対応していないブラウザでエラーが出るかも。 |
| + | |
| + | tsc -t ES5 yourfile.ts |
| + | |
| + | 文法は以下の通り。 |
| + | |
| + | class TestClass{ |
| + | private _prm1:number; |
| + | |
| + | get prm1():number{ |
| + | return this._prm1; |
| + | } |
| + | set prm1(p:number){ |
| + | this._prm1 = p; |
| + | } |
| + | |
| + | |
| + | showNumber():void{ |
| + | alert(this.prm1 + "です"); |
| + | } |
| + | |
| + | } |
| + | var tc:TestClass = new TestClass(); |
| + | tc.prm1 = 10; |
| + | tc.showNumber() // => 10です |
| + | |
| + | *スタティック変数 [#b92a80f6] |
| + | |
| + | インスタンスではなく、クラスに属するスタティック変数を定義することもできる。 |
| + | |
| + | class TestClass1{ |
| + | static prm:number = 1; |
| + | |
| + | |
| + | showPrm(){ |
| + | alert(TestClass1.prm); |
| + | } |
| + | } |
| + | |
| + | TestClass1.prm = 100; |
| + | |
| + | var tc:TestClass1 =new TestClass1(); |
| + | |
| + | tc.showPrm() // => 100 |