2017-03-19 12 views
10

私はJavascriptをJavascript(ES6)で 'static get'の意味は?

でこのような表現の今をいただきまし意味
static get is() { return "custom-element"; } 

私はstaticは、JavaやC++と同様の挙動を持つことができますが、私はこれらの構文に関するより多くの情報が必要と推測する必要があります。

+1

一般的に、構文についての詳細を知りたい場合は、まずGoogleを使用します。最初にやってみることをお勧めします。 – 4castle

答えて

11

あなたは正しいです。彼らはかなり近いC++やJavaのような他のオブジェクト指向プログラミング言語へ

すべてが文書化されているです。これはあなたが見ている静的メソッドで、取得するプロパティまたは取得するオブジェクトのgetterです。

あなたはexplore static

静的メソッドを見れば。静的プロパティ(またはクラスプロパティ)は、Foo自体のプロパティです。あなたは、静的とメソッド定義の前に付ける場合は、クラスメソッドを作成します。

> typeof Foo.staticMethod 
'function' 
> Foo.staticMethod() 
'classy' 

そして静的プロパティ:

私は一番上のドキュメントに与えられたよりも偉大な例を考えることはできません今、私の頭の。ここで私は重要な部分を貼り付けています。

class Point { 
    constructor(x, y) { 
     this.x = x; 
     this.y = y; 
    } 
} 

Point.ZERO = new Point(0, 0); 

あなたは読み取り専用のプロパティを作成するObject.defineProperty()を使用することもできますが、私は割り当てのシンプルさが好きです。

第二に、あなたは静的ゲッター作成することができます。どちらの場合も

class Point { 
    constructor(x, y) { 
     this.x = x; 
     this.y = y; 
    } 
    static get ZERO() { 
     return new Point(0, 0); 
    } 
} 

を、あなたが読むことができるという性質Point.ZEROを取得します。最初のケースでは、毎回同じインスタンスが返されます。 2番目のケースでは、毎回新しいインスタンスが返されます。

+0

私はその最初の文に非常に注意します。構文は似ていますが、それは共通点です。 JSの 'class 'は' prototype'を持つコンストラクタ関数の文法的砂糖です。 – 4castle

+0

@ 4castle私は怖いです。 '静的プロパティ(またはクラスプロパティ)は、Foo自体のプロパティです。メソッド定義に静的な接頭辞を付ける場合は、クラスメソッドを作成します。 'これはJavaにも適用されます。文章が間違っていれば私を訂正してください。 –

+0

それはすべて正しいですが、JSがJavaのように動作すると仮定すると危険です。たとえば、JSでは 'static'プロパティは元の関数を' extend'する関数に継承されます。また、 'Foo.prototype'から継承したオブジェクトはJava構文のように' static'メソッドにアクセスできません。私は、クラス構文を使う人は、古くからのやり方を学ぶ時間を取らず、クラスを不適切なやり方で使うことに気づきます。 – 4castle

関連する問題