我希望能够获得不同JavaScript对象的函数列表,特别是String和其他基元。我以为我能够以某种方式使用String.prototype并神奇地获取原型中的函数列表但没有骰子。有什么想法吗?
我也尝试使用下划线。例如
_.functions("somestring");
......不为我做。
答案 0 :(得分:4)
您使用getOwnPropertyNames,它会返回所有属性的数组,可枚举与否
Object.getOwnPropertyNames(String.prototype)
如果您只需要这些功能(我认为这只会排除length
?),您可以过滤
var fns = Object.getOwnPropertyNames(String.prototype).filter(function(itm) {
return typeof String.prototype[itm] == 'function';
});
答案 1 :(得分:2)
实际问题是,原语原型的成员不可枚举。因此,我们必须使用Object.getOwnPropertyNames
来获取它们,即使是非可枚举的属性也是如此。
您可以编写实用程序功能,例如
function getFunctions(inputData) {
var obj = inputData.constructor.prototype;
return Object.getOwnPropertyNames(obj).filter(function(key) {
return Object.prototype.toString.call(obj[key]).indexOf("Function") + 1;
});
}
console.log(getFunctions("Something"));
console.log(getFunctions(1));
这将过滤作为Function对象的所有属性,并将它们作为数组返回。