Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 混淆了Resig Curry示例和;“论点”;对象_Javascript - Fatal编程技术网

Javascript 混淆了Resig Curry示例和;“论点”;对象

Javascript 混淆了Resig Curry示例和;“论点”;对象,javascript,Javascript,在中,John Resig讨论了以下有关咖喱的片段: Function.prototype.curry = function() { var fn = this, args = Array.prototype.slice.call(arguments); return function() { return fn.apply(this, args.concat( Array.prototype.slice.call(arguments)));

在中,John Resig讨论了以下有关咖喱的片段:

Function.prototype.curry = function() {
    var fn = this, args = Array.prototype.slice.call(arguments);
    return function() {
      return fn.apply(this, args.concat(
        Array.prototype.slice.call(arguments)));
    };
  };
我对表达式
Array.prototype.slice.call(参数)
感到困惑

  • 这里“arguments”是数组的slice()方法的“this”参数,但是“slice()”本身需要一个参数,所以我认为您需要执行类似于
    Array.prototype.slice.call(arguments,)
    的操作。我不明白那些代码是怎么工作的

  • 根据“arguments”实际上不是一个数组,而是一个类似数组的对象。我们如何对其调用“slice()”?如果我输入代码
    console.log(arguments.slice())
    ,我会得到一个错误,说该对象没有slice方法


  • 这里发生了什么?

    .slice()
    的参数是可选的。如果不存在,函数只返回原始数组(或类似数组的对象)的副本


    .slice()
    函数只关心
    对象上是否存在“length”属性。因此,因为“arguments”确实有一个“length”属性,
    .slice()
    很高兴。

    .slice()
    的参数是可选的。如果不存在,函数只返回原始数组(或类似数组的对象)的副本


    .slice()
    函数只关心
    对象上是否存在“length”属性。因此,因为“参数”确实有“长度”属性,
    .slice()
    很高兴。

    回答第一个问题:

    如果在没有参数的数组上调用slice,它将只返回数组的一个副本
    Array.prototype.slice.call(arguments)
    也执行相同的操作,但对
    arguments
    对象进行操作,返回一个数组

    第二个问题的答案:


    我们可以在
    参数上调用slice,因为它是一个“通用”方法(参见注释)。当您将
    参数
    对象作为
    传递时,
    切片
    会将其视为数组。由于
    参数
    是一个包含
    长度
    属性的属性,因此它可以正常工作。

    回答第一个问题:

    如果在没有参数的数组上调用slice,它将只返回数组的一个副本
    Array.prototype.slice.call(arguments)
    也执行相同的操作,但对
    arguments
    对象进行操作,返回一个数组

    第二个问题的答案:



    我们可以在
    参数上调用slice,因为它是一个“通用”方法(参见注释)。当您将
    参数
    对象作为
    传递时,
    切片
    会将其视为数组。由于
    arguments
    是一个包含
    length
    属性的属性,因此它可以正常工作。

    Resig voodoo,您的所有代码都属于John@Xander,不,它没有明确讨论这一点,尽管我认为这个片段可能来自原型库。Resig voodoo,你所有的代码都属于John@Xander,不,它没有明确地讨论这个问题,尽管我认为这个片段可能来自原型库。@Pointy:文档按要求列出startIndex是错误的吗?看来你的回答错了!:)但是我想我知道你的问题的答案:规范说第一个参数被转换成一个int,带有
    ToInteger
    ,当你通过undefined时,它恰好返回0。事实上,这不是一个错误。你会自动得到通知,但我也不得不@Pointy通知他。所以我只是这样做了,而不是在两个答案中问同样的问题:)@Pointy太:为什么直接调用arguments对象上的slice不起作用考虑到巴法雷托对我最后一条评论的回答,现在一切都清楚了,除了这个谜团仍然存在……@Jonah Pointy不会被通知,因为这不是他的答案,他也没有参与这里的评论。更多关于meta:@Pointy:docs按要求列出startIndex的详细信息是否错误?看来你的回答错了!:)但是我想我知道你的问题的答案:规范说第一个参数被转换成一个int,带有
    ToInteger
    ,当你通过undefined时,它恰好返回0。事实上,这不是一个错误。你会自动得到通知,但我也不得不@Pointy通知他。所以我只是这样做了,而不是在两个答案中问同样的问题:)@Pointy太:为什么直接调用arguments对象上的slice不起作用考虑到巴法雷托对我最后一条评论的回答,现在一切都清楚了,除了这个谜团仍然存在……@Jonah Pointy不会被通知,因为这不是他的答案,他也没有参与这里的评论。关于meta:Pointy的更多细节,请查看对bfavaretto回答的评论,了解后续问题(我对你们两个都有相同的问题)。谢谢。@Jonah你都准备好了吗?看起来bfavaretto提供了典型的精彩答案,但请随意提出更多问题。
    参数
    对象很奇怪。谢谢你的夸奖!有意思的是,请看对bfavaretto回答的评论,了解后续问题(我对你们两个都有相同的问题)。谢谢。@Jonah你都准备好了吗?看起来bfavaretto提供了典型的精彩答案,但请随意提出更多问题。
    参数
    对象很奇怪。谢谢你的夸奖!