0

プライベート変数で単純な get/set メソッドを実行したいので、実行します

_Var1:number = 0;

Var1():number
{
   return this._Var1;
}

Var1(num:number)
{
   this._Var1 = num;
}

これにより、コンパイラ エラーがスローされます。引数をとらないメソッドと引数を 1 つ取るメソッドは同じ名前を共有できますか?

4

3 に答える 3

4

どうぞ

    Var1(input?:number):number
    {
        if(typeof input != typeof 123)
            return this._Var1;
        else
            return this._Var1 = input;
    }

ただし、オーバーロード シグネチャに興味がある場合は、次のようにする必要があります。

class Foo{

    _Var1:number = 0;

    // Sample of overload signatures
    Var1():number
    Var1(input:number):number
    Var1(input?:any):number // The last signature Must be super set of all previous signatures. 
    {
        if(typeof input != typeof 123)
            return this._Var1;
        else
            return this._Var1 = input;
    }
}

もっと

関数のオーバーロードに関するドキュメント: https://basarat.gitbooks.io/typescript/content/docs/types/functions.html#overloading

于 2013-08-11T05:46:54.520 に答える
1

ECMAScript 5 以降をターゲットにしている場合、コードに必要なのは get キーワードと set キーワードだけです。

_Var1:number = 0;

get Var1():number
{
   return this._Var1;
}

set Var1(num:number)
{
    this._Var1 = num;
}

古いバージョンをターゲットにする場合は、オーバーロードではなく getVar1 および setVar1 メソッド名を使用することをお勧めします。これにより、入力のチェックが必要になります。2 つの方法は非常に簡潔です。

または、ランタイム変数をデフォルトの引数として使用できる巧妙なトリックを利用することもできます。

Var1(num: number = this._Var1) {
    return this._Var1 = num;
}

私は get... と set... という名前のメソッドを今でも好みます。その理由は次のとおりです。このために生成された JavaScript は、gets に不要なコードが含まれているため、凶悪に見えます。また、設定時に値を返しますが、これは通常の規則ではありません。

于 2013-08-11T07:29:12.347 に答える