Javascript 混淆了Resig Curry示例和;“论点”;对象
在中,John Resig讨论了以下有关咖喱的片段: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)));
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(参数)
感到困惑
Array.prototype.slice.call(arguments,)
的操作。我不明白那些代码是怎么工作的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提供了典型的精彩答案,但请随意提出更多问题。参数
对象很奇怪。谢谢你的夸奖!