Javascript 重写的绑定函数具有未定义的参数

Javascript 重写的绑定函数具有未定义的参数,javascript,Javascript,我正在对客户网站上的第三方代码进行故障排除。客户端遇到代码不工作的问题。我发现这个问题与绑定的JS函数有关。传递给绑定函数的参数未定义。我不明白为什么。一切似乎都很好。然而,我随后发现客户机已经重写了Bind函数。以下是他们所拥有的: Function.prototype.bind = function(scope) { var _function = this; return function() { return _function.apply(scope, argumen

我正在对客户网站上的第三方代码进行故障排除。客户端遇到代码不工作的问题。我发现这个问题与绑定的JS函数有关。传递给绑定函数的参数未定义。我不明白为什么。一切似乎都很好。然而,我随后发现客户机已经重写了Bind函数。以下是他们所拥有的:

Function.prototype.bind = function(scope) {
  var _function = this;

  return function() {
    return _function.apply(scope, arguments);
  };
};
如果我创建一个函数

var sumFunction = function(a, b){
  console.log("a: " + a);
  console.log("b: " + b);
  return a + b;
}
然后绑定该函数:

var boundFunction = sumFunction.bind(null, 10);
当我调用该绑定函数时,我得到以下结果:

console.log(boundFunction(20));

a: 20
b: undefined
NaN
console.log(boundFunction(20));

a: 10
b: undefined
NaN
我发现了一个类似的SO问题,它使用了相同的bind函数

看来它以前是有用的?我所联系的这个问题似乎在2013年就起作用了,但现在它并没有形成我的想法

这是不是过时了?JavaScript并不是我的主要优势,但我的客户会想知道为什么他们的函数会导致这个问题

我发现重写的bind函数是奇数。特别是行返回_function.applyscope、参数;似乎传递整个arguments对象是不正确的。它不应该只发送数组位置1或更高的参数吗?我尝试将其更改为此以测试:

Function.prototype.bind = function(scope) {

  var _function = this;
  var newArgs = Array.prototype.slice.call(arguments, 1)

  return function() {
    return _function.apply(scope, newArgs );
  };
};
但现在我只得到以下信息:

console.log(boundFunction(20));

a: 20
b: undefined
NaN
console.log(boundFunction(20));

a: 10
b: undefined
NaN

当函数有界时,在第一个参数之后可能会有一个参数数组,因此使用slice1获取它们。调用函数时,获取所有参数,并对两个参数数组进行concat

Concat两个参数数组:

Function.prototype.bind=functionscope{ var _函数=此; var args1=Array.prototype.slice.callarguments,1; 返回函数{ var args2=Array.prototype.slice.callarguments,0; return _function.applyscope,args1.concatargs2; }; }; var sumFunction=functiona,b{ console.loga:+a; console.logb:+b; 返回a+b; } var boundFunction=sumfonment.bindnull,10;
console.logboundFunction20 当函数有界时,在第一个参数之后可能会有一个参数数组,因此使用slice1获取它们。调用函数时,获取所有参数,并对两个参数数组进行concat

Concat两个参数数组:

Function.prototype.bind=functionscope{ var _函数=此; var args1=Array.prototype.slice.callarguments,1; 返回函数{ var args2=Array.prototype.slice.callarguments,0; return _function.applyscope,args1.concatargs2; }; }; var sumFunction=functiona,b{ console.loga:+a; console.logb:+b; 返回a+b; } var boundFunction=sumfonment.bindnull,10;
console.logboundFunction20;谢谢你的快速评论!那么自2013年以来发生了什么变化?你知道吗?很明显,根据我的链接,它过去是有效的。这对我来说很奇怪。好吧,这个绑定函数只是客户端添加的一些多边形填充?这是有道理的。我不知道为什么他们会覆盖它。在旧浏览器中的一些参数实现中存在问题,在这种情况下导致内存泄漏。当然,我现在能找到的唯一提到的是中的一个答案,所以没有给出太多细节。事实证明,与其说是内存泄漏,不如说是浏览器引擎优化的问题。哦,我不知道。谢谢你的信息!谢谢你的快速评论!那么自2013年以来发生了什么变化?你知道吗?很明显,根据我的链接,它过去是有效的。这对我来说很奇怪。好吧,这个绑定函数只是客户端添加的一些多边形填充?这是有道理的。我不知道为什么他们会覆盖它。在旧浏览器中的一些参数实现中存在问题,在这种情况下导致内存泄漏。当然,我现在能找到的唯一提到的是中的一个答案,所以没有给出太多细节。事实证明,与其说是内存泄漏,不如说是浏览器引擎优化的问题。哦,我不知道。谢谢你的信息!