日期:2014-05-16  浏览次数:20399 次

求助,javascript 数组问题。
<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;
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>


这段代码运行起来后,打印的都是gg,而不是ff,gg  解解答
------解决方案--------------------
很明显,你传递的都是对同一个对象的引用,只不过后者把前面覆盖掉了 ,修改如下
<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>

------解决方案--------------------
<html>
<head>
<script>
function test(o){
    this.options = {
        t : {
           name:null,
           value:null
        },
        ts : []   
    };       
     
   this.extends = function(obj1,obj2){