alert(alist.length)调用的是length的toString()方法.lz不是已经定义了吗?
length是个对象,当然调用它的toString()方法了。

解决方案 »

  1.   

    为什么alert(list)会输出1,2,3的结果,难道他会自动调用toString方法? 是的
    那alert(alist.length);调用的又是什么方法呢?掉用的是 
    this.length={
    valueOf:function (){
    return m_elements.length;
    },
    toString: function(){
    return m_elements.length;
    }

    length 的 toString方法
      

  2.   

    你去掉toString 就可以看出来了
      

  3.   

    <html>
    <script>
    function list(){
    var m_elements=[];
    m_elements = Array.apply(m_elements,arguments);
    this.length={
    valueOf:function (){
    alert('valueOf');
    return m_elements.length;
    },
    toString: function(){
    return m_elements.length;
    }
    }
    this.toString=function(){
    return m_elements.toString();
    }
    this.add=function(){
    m_elements.push.apply(m_elements,arguments);
    alert('add');
    }
    }
    var alist=new list(1,2,3);
    alert(alist);
    alert(alist.length);
    alist.add(4,5,6);
    alert(alist);
    alert(alist.length);
    </script>
    </html>
    alert('add');是打出来了1次,说明alert(alist);只调用了toString()方法,为什么?
    alert('valueOf');没打出来,为什么valueOf()方法不调用?
    谁能说说原理,谢谢
      

  4.   

    去掉toString()方法显示object?为什么会显示alist的类型?