JavaScript数组反射

Mos*_*aly 3 javascript arrays inheritance prototype

如何循环JavaScript Array成员函数,以下代码不起作用:(

for (var i in Array.prototype){
    alert(i)
} //show nothing 

for (var i in []){
   alert(i)
} // show nothing
Run Code Online (Sandbox Code Playgroud)

med*_*iev 7

没有任何原生原型属性是可枚举的,但您可以在ECMA规范中找到您正在寻找的确切内容:

http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf

您只能枚举您定义的属性,例如:

Object.prototype.foo = function(){};

x = {};

for ( var prop in x ) {
    alert( prop );
}
Run Code Online (Sandbox Code Playgroud)

会警告:

FOO

另一个有用的技巧是,你可以使用object.hasOwnProperty( property )内部的for..in loop分支仅当对象直接拥有一个属性,该属性不从构造函数的原型,其中几乎所有的物体从下降下降Object.prototype.