如何枚举es6类方法

时间:2015-07-15 07:03:37

标签: javascript ecmascript-6

如何枚举ES6类的方法?类似于Object.keys

以下是一个例子:

class Callbacks {
  method1() {
  }

  method2() {
  }
}

const callbacks = new Callbacks();

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

2 个答案:

答案 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
}