【问题标题】:Understanding callback.call function in jquery了解jQuery中的callback.call函数
【发布时间】:2018-05-24 05:40:22
【问题描述】:

请浏览以下代码。 我无法确切知道 calllback.call 正在做什么。

另外,我不知道 this 和 this[i] 之间有什么区别,以及 if(callback.call(this, this[i])) 如何评估为真或假。

Array.prototype.each = function(callback) {
  var i = 0;
  while (i < this.length) {
    callback.call(this, this[i]);
    i++;
  }
  return this;
};

Array.prototype.map = function(callback) {
var i = this.length;
var found = []
while (i--) {
  if(callback.call(this, this[i])) {
    found.push(this[i]);
  }
}
return found;
};

函数调用如下:

Array.each(function(value){
...
})

Array.map(function(value){
...
})

【问题讨论】:

  • 在这两种情况下,eachmap 都被分配了一个函数。
  • 你不会调用像[1,2,3].each(function(){ /* do something */})这样的函数吗?

标签: javascript jquery arrays callback call


【解决方案1】:

我无法确切知道 calllback.call 在做什么。

Function.prototype.call 允许您调用具有 this 显式值的函数

callback.call(this, this[i]);

相同
callback(this[i])

除了在回调内部,this 的值设置为与当前上下文中的值相同。


我也不知道this和this[i]有什么区别。

在此上下文中,this 是当前数组。所以this 表示整个数组,this[i] 获取数组的第 i 个元素。


您拥有的.each 函数将遍历一个数组并为每个数组调用一个函数。这类似于 javascript 内置的 Array.prototype.forEach

.map 被命名为好像它是 Array.protoype.map 的 polyfill,但实际上是在执行 .filter 操作。奇怪。

【讨论】:

  • 我能知道 if(callback.call(this, this[i])) 如何被评估为真或假
  • 你传入什么函数作为回调?这一切都将取决于该函数返回的内容。
猜你喜欢
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多