<script type="text/javascript">

function news(strid,strfid,strname){
    this.id = strid;
    this.fid = strfid ;
    this.name = strname ;
    return this ;
}var news_array = new Array();for (i = 0; i < 10; i++)
{
news_array[i] = news(i,'0','honglonglong'+i);
}//alert(news_array.length);for (i = 0; i < news_array.length; i++)
{
var s =news_array[i]
document.write(i+'  '+s.id+'  '+s.fid+'   '+s.name +'<br>');
}
</script>结果为:
0 9 0 honglonglong9
1 9 0 honglonglong9
2 9 0 honglonglong9
3 9 0 honglonglong9
4 9 0 honglonglong9
5 9 0 honglonglong9
6 9 0 honglonglong9
7 9 0 honglonglong9
8 9 0 honglonglong9
9 9 0 honglonglong9按理说,s.id存进去的应该是i,怎么会全是9呢?一个奇怪的问题,请高人和大虾帮忙看看

解决方案 »

  1.   

    function news(strid,strfid,strname){
        this.id = strid;
        this.fid = strfid ;
        this.name = strname ;
        return this ;
    }这里的this是window对象 后面的把前面的覆盖掉了
      

  2.   

    你在循环赋值的时候,其实操作的是同一个对象
    for (i = 0; i < 10; i++)
    {
        news_array[i] = new news(i,'0','honglonglong'+i);
    }
    这样就可以了
      

  3.   

    <script type="text/javascript">
        
    function news(strid,strfid,strname){
        this.id = strid;
        this.fid = strfid ;
        this.name = strname ;
        //return this ;
    }var news_array = new Array();for (i = 0; i < 10; i++)
    {
        news_array[i] = new news(i,'0','honglonglong'+i);
    }//alert(news_array.length);for (i = 0; i < news_array.length; i++)
    {
        var s =news_array[i]
        document.write(i+'  '+s.id+'  '+s.fid+'   '+s.name +'<br>');
    }
    </script>
      

  4.   

    构造函数没有new 始终只有一个对象
      

  5.   

    我是这样理解的。当直接调用news的时候this指的是window对象。就像一楼所说的。
    当new news的时候就生成的一个新的对象,而此时this就指向这个新的对象。
    不知道这样理解对不对。。
      相互学习。