如何枚举ES6类的方法?类似于Object.keys
以下是一个例子:
class Callbacks {
method1() {
}
method2() {
}
}
const callbacks = new Callbacks();
callbacks.enumerateMethods(function(method) {
// method1, method2 etc.
});
答案 0 :(得分:40)
Object.keys()
仅迭代对象的可枚举属性。而ES6方法则不然。您可以使用getOwnPropertyNames()
之类的内容。此外,还在对象的原型上定义了方法,因此您需要Object.getPrototypeOf()
来获取它们。工作example:
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);
}
请注意,如果您使用符号作为方法键,则需要使用getOwnPropertySymbols()
来迭代它们。
答案 1 :(得分:0)
在ES6中没有类似Object.keys
的迭代器/ getter方法(但是?)。但是,您可以使用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
}