很明显,你传递的都是对同一个对象的引用,只不过后者把前面覆盖掉了 ,修改如下
<html>
<head>
<script>
function test(o){
    this.options = {
t : {
   name:null,
   value:null
},
ts : []
};       

   this.extends = function(obj1,obj2){
 for (var prop in obj2){
         obj1[prop] = obj2[prop];
     }
}
   this.getT = function(thObject){
   this.options.t= {
   name:null,
   value:null
}
var th = this.options.t;
for(var prop in thObject){
th[prop] = thObject[prop];
}
return th;
}
  this.addThToColl = function(th){
  this.options.ts.push(th);
}
this.extends(this.options,o);this.init=function(){   for(var i=0;i<this.options.ts.length;i++){
alert(this.options.ts[i].name);
}
}
}var  kk = new test({});
kk.addThToColl(kk.getT({name:"ff"}));
kk.addThToColl(kk.getT({name:"gg"}));
kk.init();
</script>
</head>
</html>

解决方案 »

  1.   

    <html>
    <head>
    <script>
    function test(o){
        this.options = {
            t : {
               name:null,
               value:null
            },
            ts : []   
        };       
         
       this.extends = function(obj1,obj2){
         for (var prop in obj2){
                obj1[prop] = obj2[prop];
                }
        }
       this.getT = function(thObject){
          //  var th = this.options.t;   //这里是传递地址了,所以会造成数组都是访问this.options.t这个变量,所以都是gg
       var th = {
                    name: null,
                    value: null
                };

        for(var prop in thObject){
            th[prop] = thObject[prop];
        }
        return th;
        }
      this.addThToColl = function(th){
         this.options.ts.push(th);
    }
    this.extends(this.options,o);
     
    this.init=function(){
     
          for(var i=0;i<this.options.ts.length;i++){
                alert(this.options.ts[i].name);
            }
        }           
    }
     
    var  kk = new test({});
    kk.addThToColl(kk.getT({name:"ff"}));
    kk.addThToColl(kk.getT({name:"gg"}));
    kk.init();
    </script>
    </head>
    </html>