Как я могу перечислять методы класса ES6? аналогично Object.keys
Вот пример:
class Callbacks {
method1() {
}
method2() {
}
}
const callbacks = new Callbacks();
callbacks.enumerateMethods(function(method) {
// method1, method2 etc.
});
Ответ 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
}