3

私はOOJavaScriptを使用して次のようなことを達成しようとしています。

class Sample
{
  public int x {get; set;}
  public int y {get; set;}

  public int z
  {
    get {return x+y;}
  }
}

上記のクラスでプロパティ'z'を実装する方法がわかりませんでした。

4

1 に答える 1

5

関数を使用する必要があります。ECMAScript第5版(ES5)の時点で、その関数は、通常の非関数の方法でアクセスするプロパティの「ゲッター」になる可能性があります。その前に、明示的な関数呼び出しを使用する必要があります。

ES5の方法は次のdefinePropertyとおりです。ライブコピー| ソース

function Sample()
{
    // Optionally set this.x and this.y here

    // Define the z property
    Object.defineProperty(this, "z", {
        get: function() {
            return this.x + this.y;
        }
    });
}

使用法:

var s = new Sample();
s.x = 3;
s.y = 4;
console.log(s.z); // "7"

ES3(以前のバージョンなど)の場合:

function Sample()
{
    // Optionally set this.x and this.y here
}
Sample.prototype.getZ = function() {
    return this.x + this.y;
};

使用法:

var s = new Sample();
s.x = 3;
s.y = 4;
console.log(s.getZ()); // "7"

getZ()実際に関数呼び出しを行う必要があるのに対し、ES5ではプロパティアクセスを作成できることに注意してください(ちょうどz)。


JavaScriptには(まだ)機能がないことに注意してください(class予約語であり、1つが登場しますが)。JavaScriptはプロトタイプ言語であるため、コンストラクター関数とプロトタイプを介してオブジェクトのクラスを実行できます。(まあ、それは少しハイブリッドです。)階層に入り始めると、いくつかの重要な反復的な配管が始まります。詳細については、StackOverflowでこの他の回答を参照してください。

于 2012-07-07T15:47:18.380 に答える