你用 prototype 给它添加了一个方法, 它当然可以枚举了

解决方案 »

  1.   

    具体参考:http://cz9908.cn/blog/article.asp?id=239
      

  2.   

    To tantaiyizu(痴情客)呵呵,谢谢兄弟提醒,送上 5 分!问题 1 是俺自己弄晕了,毕竟 JS 是基于对象的,与纯 OO 还是有差别的。但是,问题 2 依然存在,为什么遍历 Object 的原型时,却可以遍历到 Function 原型上的方法?修改一下,问题更明显,代码如下: <script language="JavaScript">
    <!--
    Object.lookMe = function() {
        alert("@_@ Object");}
    Object.prototype.showMeOnObj = function() {
        alert("showMeOnObj");}Function.lookMe = function() {
        alert("@_@ Function");}
    Function.prototype.showMeOnFun = function() {
        alert("showMeOnFun");}for (var o in Object) {
        Object[o]();
    }
    // showMeOnFun —— 问题:为什么遍历 Object 的原型时,却可以遍历到 Function 原型上的方法?
    // showMeOnObj
    // @_@ Object
    //-->
    </script>
      

  3.   

    TO tantaiyizu(痴情客)呵呵,谢谢兄弟的链接,再送上 20 分!链接的文章中 1,2 两点说的有道理,消化中...
    而第 3 点有点儿问题,俺的问题就是一个例证。现在问题基本明确了,应该就出在原型上!希望能有高人再指点一下,谢谢!今晚来结贴!
      

  4.   

    alert(typeof Function);
    alert(typeof Object);得出一个更有意思的答案
      

  5.   

    两个alert全是function
    只能说明,Object也是Function的一个派生类你对Function原型里的一些修改,也被Object继承了
      

  6.   

    To pyuan(菜鸟)alert(typeof Function);
    alert(typeof Object);的结果不奇怪,因为 Function 和 Object 都是构造函数,类型当然是 function ,不信你看:alert(Object);
    alert(Function);// 输出
    function Object() {
    [native code]
    }function Function() {
    [native code]
    }
      

  7.   

    <script type="text/javascript">
    Object.lookMe = function() {
        alert("@_@ Object");
    };Object.prototype.showMe = function() {
        alert("Object");
    };Function.lookMe = function() {
        alert("@_@ Function");
    };
    Function.prototype.showMe = function() {
        alert("Function");
    };for (var o in Function) {
        Function[o]();
    }for (var o in Object) {
        Object[o]();
    }
    //第二个这里Object为函数处理所以它继承了Function的showMe方法,
    //如果你new 下就是对象了(new Object)。这样就继承了Object的showMe方法。。
    //第一个,只不过是给Function函数加了个成员,并且它是函数,所以自然也继承Function的showMe方法。
    //如果你new 下也不会继承Object的showMe方法因为这个Function函数比较另类 - -。
    </script>
      

  8.   

    是哦,看来是我弄错了,嘿嘿
    我弄反了,应该是Funciton类是派生自Object类的
    Funciton类和Object类应该是共用一个prototype吧
    我记得看过一种讲javascript里的类型派生的方式,就是直接把派生类的prototype = 基类的potoype。
    javascript毕竟只是一种脚本语言……
      

  9.   

    昂,并且
    Object.prototype.showMe = function() {
        alert("Object");
    };
    也被Function继承了,但是。又被。
    Function.prototype.showMe = function() {
        alert("Function");
    };
    给盖了。。
    飘走的说。
      

  10.   

    举个例子~~~~
    function aa()
    {
    }
    aa.prototype.showaa = function(){
        alert('aa');
    }
    function bb(){
    }bb.prototype = aa.prototype; // bb 类继承自aa类bb.prototype.showbb = function(){
        alert('bb');
    }
    var b = new bb();
    b.showaa();
    var a = new aa();
    a.showbb();bb 类 继承自 aa类
    他们共用一个prototype,所以派生类中对prototype 的改变,基类也一样会改变。