当前位置:  开发笔记 > 编程语言 > 正文

List Object的内置属性

如何解决《ListObject的内置属性》经验,为你挑选了2个好方法。

有没有办法循环Javascript对象的内置属性?

for ... in让我接近我想去的地方,但是"A for ... in循环不会迭代内置属性."



1> Casey Chu..:

我意识到这个问题已经有三年了,但是现在,使用ES5,它有可能:

>>> Object.getOwnPropertyNames(Object)

["prototype", "getPrototypeOf", "getOwnPropertyDescriptor", "keys", "defineProperty", "defineProperties", "create", "getOwnPropertyNames", "isExtensible", "preventExtensions", "freeze", "isFrozen", "seal", "isSealed", "length", "arity", "name", "arguments", "caller"]


为了澄清一点,Object.getOwnPropertyNames(Array)提供了Array的内置属性.

2> Borgar..:

答案是不.您不能枚举不可枚举的属性.然而,至少有两种方法可以解决这个问题.

第一种是生成所有可能的字符组合以用作测试属性名称(想想:a,b,c,... aa,ab,ac,ad,...).鉴于标准社区以提出非常长的方法名称(getElementsByTagNames,propertyIsEnumerable)而闻名,这种方法需要一些耐心.:-)

另一种方法是从某些预定义列表中测试已知的本机属性.

例如:对于array您将测试所有已知的本机属性Function.prototype:

prototype caller constructor length name apply call toSource toString valueOf toLocaleString

...和继承自的东西Object.prototype:

__defineGetter__ __defineSetter__ hasOwnProperty isPrototypeOf __lookupGetter__
__lookupSetter__ __noSuchMethod__ propertyIsEnumerable unwatch watch

...和继承自的东西Array:

index input pop push reverse shift sort splice unshift concat join slice indexOf lastIndexOf 
filter forEach every map some reduce reduceRight

..最后,以及可选的,您正在测试的对象的每个可枚举属性:

for (var property in myArrayObject) myPossibleProperties.push( property );

然后,您将能够测试其中的每一个,以查看它们是否存在于对象实例上.

这不会显示未知的非可枚举成员(未记录,或由其他脚本设置),但允许您列出可用的本机属性.

Array在Mozilla开发人员中心和MSDN上找到了有关本机属性的信息.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有