2016-06-12 3 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) 

AFAIK нет никакого стандартного способа получить оба несчетного свойство от прототипа и перечисляемых свойства экземпляра вместе.

+1

Awesome - именно то, что я искал! Благодаря :) –

-1

Я не тестировал, все же думаю, что есть два способа сделать это. 1-й должен возвратить «эту» среду и петлю над ней. Второй - тот же, что и объект 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

Да, я уже пробовал ваш второй подход, который не работает. Первый, не будет работать вообще, пока вы не создадите экземпляр нового экземпляра класса 'var myclass = new MyClass()'. И даже после этого он возвращает свойства, а не методы в классе - это то, что я искал ... –

+0

Может быть, мы можем сделать цикл внутри класса и вернуть его как объект? Вы тоже это пробовали? – KAKAN

Смежные вопросы