2016-06-12 14 views
3

JavaScriptを使用した新しいフレームワークの成長に伴い、多くの人がECMAScript 6 shimまたはTypeScriptを採用しています。私の質問はこれです:ES6クラスのメソッドとプロパティを繰り返します。

どのようにES6クラスのメソッド/プロパティを反復処理しますか?

(オブジェクトとの)(クラスで)

var obj = { 
    prop: 'this is a property', 
    something: 256, 
    method: function() { console.log('you have invoked a method'); } 
} 

for (var key in obj) { 
    console.log(key); 
} 

// => 'prop' 
// => 'something' 
// => 'method' 

class MyClass { 
    constructor() { 
    this.prop = 'prop'; 
    this.something = 256; 
    } 

    method() { 
    console.log('you have invoked a method'); 
    } 
} 

にはどうすればいいだけでなく、必要に応じてMyClassが持っている方法、およびそのプロパティを一覧表示しますか?

答えて

9

constructor及び任意定義されたメソッドは、クラスのの非列挙特性でありますprototypeオブジェクトです。

そのために(クラスのインスタンスを作成せずに)名前の配列を取得することができます:

Object.getOwnPropertyNames(MyClass.prototype) 

あなたは、インスタンスを作成せずに特性を得ることはできませんが、Object.keysを使用できるように行われました一緒にプロトタイプからの非列挙特性およびインスタンスの列挙特性の両方を取得する標準的な方法がありません私の知る限り

Object.keys(myInstance) 

:オブジェクトのみ列挙プロパティを返す関数。

+1

恐ろしい - 私が探していたもの!ありがとう:) –

-1

まだテストしていませんが、まだ2つの方法があると思います。 1つ目は、「this」環境を返してループすることです。 2番目はJavascriptのオブジェクトと同じです。 第1の例: - (未テスト)

class MyClass { 
    constructor() { 
    this.prop = 'prop'; 
    this.something = 256; 
    } 

    method() { 
    console.log('you have invoked a method'); 
    } 
    get getthis() 
    { 
    return this; 
    } 
} 

for(var key in MyClass.getthis) 
{ 
    console.log(key); 
} 

これは未テスト:-(第二の方法である)

class MyClass { 
    constructor() { 
    this.prop = 'prop'; 
    this.something = 256; 
    } 

    method() { 
    console.log('you have invoked a method'); 
    } 

} 

for(var key in MyClass) 
{ 
    console.log(key); 
} 
+0

ええ、私はすでに2番目のアプローチを試しましたが、これはうまくいきません。最初のクラスは、 'var myclass = new MyClass()'クラスの新しいインスタンスをインスタンス化するまで、まったく動作しません。そしてその後も、クラスのメソッドではなく、プロパティを返すだけです。これは私が探していたものです... –

+0

クラス内でループを行い、オブジェクトとして返すことができるのでしょうか?あなたもそれを試しましたか? – KAKAN

関連する問題