为了账号安全,请及时绑定邮箱和手机立即绑定

获取类的函数(方法)

获取类的函数(方法)

米脂 2019-09-24 15:34:41
我必须动态获取ES6类的属性和功能。这有可能吗?使用for ... in循环,我只能循环访问类实例的属性:class Foo {  constructor() {    this.bar = "hi";  }  someFunc() {    console.log(this.bar);  }}var foo = new Foo();for (var idx in foo) {  console.log(idx);}输出:bar
查看完整描述

3 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

此功能将获取所有功能。是否继承,是否可枚举。包括所有功能。


function getAllFuncs(obj) {

    var props = [];


    do {

        props = props.concat(Object.getOwnPropertyNames(obj));

    } while (obj = Object.getPrototypeOf(obj));


    return props.sort().filter(function(e, i, arr) { 

       if (e!=arr[i+1] && typeof obj[e] == 'function') return true;

    });

}

做测试


getAllFuncs([1,3]);


控制台输出:


["constructor", "toString", "toLocaleString", "join", "pop", "push", "concat", "reverse", "shift", "unshift", "slice", "splice", "sort", "filter", "forEach", "some", "every", "map", "indexOf", "lastIndexOf", "reduce", "reduceRight", "entries", "keys", "constructor", "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "__defineGetter__", "__lookupGetter__", "__defineSetter__", "__lookupSetter__"]

注意


它不返回通过符号定义的函数。


查看完整回答
反对 回复 2019-09-24
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

班级的成员不可枚举。要获得它们,您必须使用Object.getOwnPropertyNames:


var propertyNames = Object.getOwnPropertyNames(Object.getPrototypeOf(foo));

// or

var propertyNames = Object.getOwnPropertyNames(Foo.prototype);

当然,这不会继承方法。没有任何一种方法可以为您提供所有这些。您必须遍历原型链并分别获取每个原型的属性。


查看完整回答
反对 回复 2019-09-24
  • 3 回答
  • 0 关注
  • 474 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号