繁体   English   中英

如何在Javascript对象中找到隐藏的属性/方法?

[英]How to find hidden properties/methods in Javascript objects?

我想通过此函数的泛化自动确定给定Javascript对象中的所有属性(包括隐藏的属性):

function keys(obj) {
    var ll = [];
    for(var pp in obj) {
        ll.push(pp);
    }
    return ll;
}

这适用于用户定义的对象,但许多内置程序都失败了:

repl> keys({"a":10,"b":2});  // ["a","b"]
repl> keys(Math) // returns nothing!

基本上,我想编写Python的dir()和help()的等价物,它们在探索新对象时非常有用。

我的理解是只有内置对象具有隐藏属性(用户代码显然不能设置“可枚举”属性直到HTML5),因此一种可能性是简单地将Math,String等属性硬编码为dir()等价物(使用这里的列表)。 但有更好的方法吗?

编辑:好的,到目前为止我看到的最佳答案是在这个帖子上 你不能用你自己的JS代码轻松做到这一点,但最好的办法是在Chrome的开发者工具(Chrome - > View - > Developer - > Developer Tools)中使用console.dir。 运行console.dir(Math)并单击三角形向下钻取以列出所有方法。 这对于大多数交互/发现工作来说已经足够好了(你真的不需要在运行时这样做)。

ECMAScript第5版。 定义Object.getOwnPropertyNames ,它返回传入对象的所有属性的数组,包括那些不可枚举的属性。 到目前为止,只有Chrome实现了此功能。

Object.getOwnPropertyNames({a: 10, b: 2});

给出["b", "a"] (没有特别的顺序)

Object.getOwnPropertyNames(Math);

给出["LN10", "PI", "E", "LOG10E", "SQRT2", "LOG2E", "SQRT1_2", "LN2", "cos", "pow", "log", "tan", "sqrt", "ceil", "asin", "abs", "max", "exp", "atan2", "random", "round", "floor", "acos", "atan", "min", "sin"]

Object.getOwnPropertyNames不会返回“隐藏的”。
Object.getOwnPropertyNames返回非继承属性的名称。

这在前面的答案中有解释。 基本上,规范明确要求(使用DontEnum )这些对象不可枚举。

这在firebug中可以找到对象方法。

Object.getOwnPropertyNames(数学);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM