Подтвердить что ты не робот

Как перечислить методы класса es6

Как я могу перечислять методы класса ES6? аналогично Object.keys

Вот пример:

class Callbacks {
  method1() {
  }

  method2() {
  }
}

const callbacks = new Callbacks();

callbacks.enumerateMethods(function(method) {
  // method1, method2 etc.
});
4b9b3361

Ответ 1

Object.keys() выполняет итерацию только перечислимых свойств объекта. И методов ES6 нет. Вы можете использовать что-то вроде getOwnPropertyNames(). Также методы определены на прототипе вашего объекта, поэтому вам понадобится Object.getPrototypeOf(), чтобы получить их. Рабочий пример:

for (let name of Object.getOwnPropertyNames(Object.getPrototypeOf(callbacks))) {
    let method = callbacks[name];
    // Supposedly you'd like to skip constructor
    if (!(method instanceof Function) || method === Callbacks) continue;
    console.log(method, name);
}

Обратите внимание, что если вы используете Symbols как ключи методов, вам нужно будет использовать getOwnPropertySymbols(), чтобы перебирать их.

Ответ 2

В ES6 нет метода итератора/геттера, например Object.keys (пока?). вы можете, однако, использовать for-of для итерации по клавишам:

function getKeys(someObject) {
    return (for (key of Object.keys(someObject)) [key, someObject[key]]);
}

for (let [key, value] of getKeys(someObject)) {
    // use key / value here
}