function A(){
var arg = [];
for(var i=0,len=arguments.length;i<len;i++){
(function(_i){
arg.push(arguments[_i]);
})(i);
}
this.num = new Array(arg);
}
A.prototype.insert = function(index,value){
this.num.splice(index,0,value);
return this.num;
}
A.prototype.get = function(index){
return this.num.slice(index,index+1);
}
var a1 = new A("red","blue","green");
a1.insert(1,"black");
alert(a1.num);请帮忙看看这段代码的错误~~弹出的结果是0,,,black

解决方案 »

  1.   


    this.num = new Array(arg);
     改成
     this.num = arg ;
      

  2.   

    function A(){
    var arg = [];
    for(var i=0,len=arguments.length;i<len;i++){
    arg.push(arguments[i]);
    }
    this.num = new Array(arg);
    }
    A.prototype.insert = function(index,value){
    this.num.splice(index,0,value);
    return this.num;
    }
    A.prototype.get = function(index){
    return this.num.slice(index,index+1);
    }
    var a1 = new A("red","blue","green");
    a1.insert(1,"black");
    alert(a1.num);
    不明白你的意思
      

  3.   

    Quote: 引用 楼主 weiba112027 的回复:
    for(var i=0,len=arguments.length;i<len;i++){
    (function(_i){
    arg.push(arguments[_i]);
    })(i);
    }你的闭包用的有问题,改成 arguments.callee.caller.arguments[_i] 就对了
      

  4.   

    你好好看看,你的arg初始化时永远会是[0,undefined,undefined]
      

  5.   

    function A(){
    var arg = [];
    for(var i=0,len=arguments.length;i<len;i++){     //这里的arguments 是 function a()的
    (function(_i){
    arg.push(arguments[_i]);    //这里的auguments 是 function(_i)的
    })(i);
    }
    this.num = new Array(arg);
    }从你的业务逻辑 我认为你希望 全部处理外层的 argumentsfunction A(){
    var arg = [];
    var argms = arguments;
    for(var i=0,len=arguments.length;i<len;i++){
    (function(_i){
    arg.push(argms[_i]);
    })(i);
    }
    this.num = new Array(arg);
    }
      

  6.   

    function A(){
    var arg = [];
    for(var i=0,len=arguments.length;i<len;i++){
    arg.push(arguments[i]);
    }
    this.num = arg;
    }
    A.prototype.insert = function(index,value){
    this.num.splice(index,0,value);
    return this.num;
    }
    A.prototype.get = function(index){
    return this.num.slice(index,index+1);
    }
    var a1 = new A("red","blue","green");
    a1.insert(1,"black");
    alert(a1.num);这是修改后的代码了,谢谢各位了