Function apply with arguments using slice
在本教程中,我在一条注释中看到了以下代码建议:
1 2 3 4 5 6 7 8 9 10 | init:function(callback){ var that =this ; return $http.jsonp(this.url).success( function(data){ that.availableGenres = that.getGenres(data); that.results = that.getResults(data); if(callback)callback.apply(null,[].slice.call(arguments)) } ) } |
但我觉得这条线很奇怪。
为什么不只是:
有人知道为什么需要
你真的不需要它,直接把
它被指定在ecmascript 3中允许,而ecmascript 5甚至允许任何类似数组的对象,而不仅仅是数组和参数对象。可能需要向后兼容甚至更早的或有缺陷的JS实现。另外,(正如你从其他答案中看到的那样),有些人不知道这个事实,认为他们需要通过实际的数组-所以他们是不必要的谨慎。
需要切片,因为function.apply需要数组,参数不是真正的数组,但可以使用切片将其转换为数组。
The arguments object is not an Array. It is similar to an Array, but
does not have any Array properties except length. For example, it does
not have the pop method. However it can be converted to a real Array:
号
1 | var args = Array.prototype.slice.call(arguments); |
这是javascript中最难看的部分之一