请问,如何用代码查看 Array 对象的内置属性?
如果是自己定义的对象,通过 for .. in 就可以查看该对象的属性和方法,
但是为什么内置的 Array 为什么不能用 for ..in 查看其属性和方法,比如 push,shift 等?比如,
var Animal = {
  eat: function () { ...}
}
var ani = new Animal();
通过 for (key in ani) { alert(key); } 
是可以查看到对象拥有哪一些属性(方法)的。然而 var arr = [1,3,5];
明明可以调用 arr.push(7); 也就是拥有 push 方法,
但是为什么用 for (key in arr) 得不到这个push呢?
1. 为什么不能用 for .. in 访问内置对象的属性?被屏蔽了?
2. 如果不能够用 for..in .. 来访问,那有没有其他的办法来访问?
3. 我们如何查看这些内置对象定义的源代码?

解决方案 »

  1.   

    ECMAScript 为元素的属性定义了 4 种特性,它们分别是 ReadOnly、DontEnum、DontDelete、Internal ,这在平时用户级别的 Javascript 是无法更改的.
    其中,DontEnum属性表示不会被for in到。
    js引擎实现的各种类的prototype的方法,这个属性都是为true的,
    而我们加上去的方法,却一定是能被for in到,因为“用户级别的 Javascript 是无法更改的”。附带的说一个问题:所以我们千万别扩展Object.prototype,它会影响“对Json对象的for in”.
      

  2.   

    var a={
    b:function(){}
    }
    //var aa=new a()   >>>>>>>>>不注释掉此行 会出错!!错误信息在下面
    for(i in a)
    alert(i)
    /*////
    错误信息:
    ---------------------------
    JScript 调试程序
    ---------------------------
    在遇到 JScript 运行时错误时中断 - 对象不支持此操作
    ---------------------------
    确定   
    ---------------------------
    /////*/
      

  3.   


    a不是构造器,当然不能new了
      

  4.   

    for (var key in ani)