没有办法,因为JS的参数全是传值方式,
具体而言是这样:对于值类型,复制值;对于引用类型,复制引用的值。
而赋值又是这样的:
JS里的变量均视同一 引用/指针,它们是保存于内存中的,JS里的赋值是改变该引用本身的值,引用指向的对象是不变的,即只改变了引用本身所占的那几个字节的内容,所以,你在函数内赋值虽然影响到参数(但这个参数与你传的变量其实是两个不同的引用,只是引用相同对象),但对于函数外的变量而言,既没影响到变量本身,也没影响到其引用的对象。总之,要完全实现你这样的写法是不可能的,不过,有一种变通之道

解决方案 »

  1.   

    急用的话先顶上:
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    var b = [];
    var c = [];
    var a=["语文","数学"];
    Array.prototype.list = function(fn){
            for (var i=0;i<this.length;i++){
    arguments[i][arguments[i].length] = this[i];
            }
    }
    a.list(b,c);
    alert(b);
    alert(c);
    //-->
    </SCRIPT>期待看看其他人的方法吧!
      

  2.   

    <script>
    var a=["语文","数学"]
    Array.prototype.list=function(){
             
            for (var i=0;i<this.length ;i++ )
            {
                    arguments[i].push (this[i]);
            }        
    }
    var b =[]
    c = [];
    a.list(b,c);
    alert(b);
    </script>这样的话,还是数组。等于说写这个函数没啥意义了,反而又增加了麻烦程度。<script>
    var a=["语文","数学"]
    Array.prototype.list=function(){
             
            for (var i=0;i<this.length ;i++ )
            {
                    arguments[i].text = this[i];
            }        
    }
    var b = c = new Object;
    a.list(b,c);
    alert([c.text, b.text]);
    </script>
    这是用对像来实现。也感觉够麻烦