【问题标题】:How to enumerate es6 class methods [duplicate]如何枚举es6类方法[重复]
【发布时间】:2015-07-15 07:03:36
【问题描述】:

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

这是一个例子:

class Callbacks {
  method1() {
  }

  method2() {
  }
}

const callbacks = new Callbacks();

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

【问题讨论】:

    标签: javascript ecmascript-6


    【解决方案1】:

    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() 来迭代它们。

    【讨论】:

    • 你还需要getOwnPropertySymbols。或使用Reflect.ownKeys
    【解决方案2】:

    在 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
    }
    

    【讨论】:

    • 我虽然是for ... in 用于属性键,for ... of 用于foreach 样式
    猜你喜欢
    • 2012-09-24
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 2017-03-24
    相关资源
    最近更新 更多