无法检索回调参数

时间:2015-01-11 18:17:47

标签: callback

var arr = [1,2,3,4,5,6];

Array.prototype.filter2 = function(){

        var fir = arguments[0];

        var sec = arguments[1];

        alert(fir);

        alert(sec);

        var arr2 = new Array();

        for(var item=0; item<this.length;item++){
              alert(this[item]);  // 1 section
              if(sec.call(this[item],fir)){
                   arr2.push(this[item]);
              }
        }
        return arr2;
}


function xyz (ele ,x){

       alert(x);
       alert(ele);
       return ele > x;
}


arr.filter2(2,xyz);

直到1'它的运行正常,但在将参数传递给回调时... x被警告为“未定义”,而ele = fir

1 个答案:

答案 0 :(得分:0)

你的回答很简单:

要么正常调用你的函数,也就是

Array.prototype.filter2 = function(){

    var fir = arguments[0];

    var sec = arguments[1];

    alert(fir);

    alert(sec);

    var arr2 = new Array();

    for(var item=0; item<this.length;item++){
          alert(this[item]);  // 1 section
          if(sec(this[item],fir)){
               arr2.push(this[item]);
          }
    }
    return arr2;

}

或者如果您仍然想坚持使用javascript .call(),那么只需使用它:

Array.prototype.filter2 = function(){

    var fir = arguments[0];

    var sec = arguments[1];

    alert(fir);

    alert(sec);

    var arr2 = new Array();

    for(var item=0; item<this.length;item++){
          alert(this[item]);  // 1 section
          if(sec.call({},this[item],fir)){
               arr2.push(this[item]);
          }
    }
    return arr2;

}

call()和apply()是预定义的JavaScript函数方法。两种方法都可用于调用函数,两种方法都必须将所有者对象作为第一个参数。

您可以点击here了解详情,然后在标题使用函数方法调用函数

下找到它