2016-07-08 10 views
12

は、xとyはコンストラクタで宣言されている方法を参照してください:宣言ES6クラスのプロパティ外の機能

class Point { 
    constructor(x, y) { 
    this.x = x; 
    this.y = y; 
    } 
    toString() { 
    return '(' + this.x + ', ' + this.y + ')'; 
    } 
} 

例えば関数の外でプロパティを宣言するための方法がある:

class Point { 
    // Declare static class property here 
    // a: 22 
    constructor(x, y) { 
    this.x = x; 
    this.y = y; 
    } 
    toString() { 
    return '(' + this.x + ', ' + this.y + ')'; 
    } 
} 

は、だから私はしたいですaを22に代入しますが、コンストラクタの外でもクラス内で実行できるかどうかは不明です。

+1

は、私はあなたを考えて上記の例と同じになります'static get x(){return 5;}を使うことができます。 } '、これは同じことをやって、ちょうどむしろ口にします。 – somethinghere

答えて

16

ES6のクラスでプロパティを直接初期化するのはm現在、このような方法で宣言することができます。同じルールもES7にあります。

しかし、それはES7の後に来る可能性のある機能です(現在ステージ3にあります)。ここにはofficial proposalがあります。

はさらに、提案が示唆された構文はslightly different=代わりの:)です:

class Point { 
    // Declare class property 
    a = 22 
    // Declare class static property 
    static b = 33 
} 

あなたはバベルを使用している場合は、この機能を有効にするために、ステージ3つの設定を使用することができます。コンストラクタ以外

Here's a Babel REPL example


ES6でこれを行うために他の方法で、クラス定義の後にそれを行うことです。

class Point { 
    // ... 
} 

// Declare class property 
Point.prototype.a = 22; 

// Declare class static property 
Point.b = 33; 

ここでは、このトピックにgood SO Threadダイビングです一部


いいえTE

class Point { 
    // Declare class property 
    a = 22 
} 

だけで糖衣構文は、このコードのショートカットを提供することです:

コメントで述べたBergi、提案構文として

class Point { 
    constructor() { 
    this.a = 22; 
    } 
} 

それらの両方文はインスタンスにプロパティを割り当てます。

しかし、これはプロトタイプに割り当てるとまったく同じではありません。

class Point { 
    constructor() { 
    this.a = 22; // this becomes a property directly on the instance 
    } 
} 

Point.prototype.b = 33; // this becomes a property on the prototype 

の両方がまだインスタンスを経由して利用できるようになります:

var point = new Point(); 
p.a // 22 
p.b // 33 

しかしbが上がっていく必要になります取得プロトタイプチェーンであり、aはオブジェクト上で直接利用可能です。 nem035 @

enter image description here

+0

'static get x(){}'も使うことができませんか?ただ疑問に思う。実際には同じことが正しいのでしょうか? – somethinghere

+0

さて、それは実際には同じ効果ではありませんが、似ている可能性があります。 'get'を使用して、コンストラクタで宣言された定数値または別の値を取得することができます。これは、直接取得/設定できる値を宣言するのと同じではありません。 – nem035

+1

Hmmm trueです。ああ、神に唯一の構文的な砂糖に感謝し、私たちは常にjsの偉大なオブジェクトの遺産に頼ることができます:) – somethinghere

1

それは提案段階にあることを右です。

しかし、@ nem035のsugggetionは、クラスインスタンスメンバーとしてそれを実現する方法の1つです。

//ここでは、静的クラスプロパティを宣言

あなたは静的メンバを宣言するために探しているようです。はい、 JavaScriptの方法は、あなたが実際に期待している方法は、活字体

class Point { 
    static a = 22; 
} 

で行うことができます

class Point { 
    // ... 
} 
Point.a = '22'; 

であればコンパイル出力は

Point.a = '22'; 
関連する問題