,javascript 数组有关问题
求助,javascript 数组问题。
这段代码运行起来后,打印的都是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){
// 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>
<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){
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>