有没有一种方法可以列出一个对象(甚至可能是一个函数)的所有属性,包括不可枚举的属性,而不使用Object.getOwnPropertyNames或Object的其他方法
因此,例如,我需要获取原生String构造函数(fromCharCode、fromCodePoint、raw等)的所有属性,但不允许使用Object中名为getOwnPropertyNames的原生函数。有没有办法做到这一点?
我尝试过for..in和for..of循环,但并未列出所有属性。另外,我也尝试过Object.keys,但同样,并没有列出所有属性。另外,为了明确我的要求:以下内容是不允许的:
var a = Object.getOwnPropertyNames.bind(Object);
console.log(a(String));我之所以这样问,是因为我正在玩一个游戏(称为ElevatorJS),在这个游戏中,用户编写了一个JavaScript程序,该程序应该在受限条件下实现某些功能。在这种特殊情况下,方法getOwnPropertyNames被覆盖并且等于null,因此我们不允许使用它。但是,事实证明,他们在String构造函数中隐藏了一些不可枚举的属性作为属性,所以我必须以某种方式访问它。此外,它们还覆盖了Object的其他方法(如entries、getOwnPropertyDescriptors等)。
有没有办法做到这一点?提前谢谢你。
发布于 2017-08-30 10:42:36
您可以使用Reflect.ownKeys(String),它将为您提供参数的所有已有成员。
https://stackoverflow.com/questions/45950939
复制相似问题