3 回答

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__"]
注意
它不返回通过符号定义的函数。

TA贡献1825条经验 获得超6个赞
班级的成员不可枚举。要获得它们,您必须使用Object.getOwnPropertyNames:
var propertyNames = Object.getOwnPropertyNames(Object.getPrototypeOf(foo));
// or
var propertyNames = Object.getOwnPropertyNames(Foo.prototype);
当然,这不会继承方法。没有任何一种方法可以为您提供所有这些。您必须遍历原型链并分别获取每个原型的属性。
添加回答
举报