Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.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 Array.prototype.sort.apply(someArray,args)与someArray.sort.apply(someArray,args)的比较_Javascript_Prototype - Fatal编程技术网

Javascript Array.prototype.sort.apply(someArray,args)与someArray.sort.apply(someArray,args)的比较

Javascript Array.prototype.sort.apply(someArray,args)与someArray.sort.apply(someArray,args)的比较,javascript,prototype,Javascript,Prototype,以下两种实现的sorted_copy函数之间是否存在实质性差异(注意:只有最后几行不同): /*第1版*/ 函数已排序\u拷贝(数组){ var extra_args=Array.prototype.slice.call(参数,1); var copy=array.slice(); 返回Array.prototype.sort.apply(复制,额外参数); } /*第2版*/ 函数已排序\u拷贝(数组){ var extra_args=Array.prototype.slice.call(参

以下两种实现的
sorted_copy
函数之间是否存在实质性差异(注意:只有最后几行不同):

/*第1版*/
函数已排序\u拷贝(数组){
var extra_args=Array.prototype.slice.call(参数,1);
var copy=array.slice();
返回Array.prototype.sort.apply(复制,额外参数);
}
/*第2版*/
函数已排序\u拷贝(数组){
var extra_args=Array.prototype.slice.call(参数,1);
var copy=array.slice();
返回copy.sort.apply(复制,额外参数);
}

更一般地说,假设我们有一个变量
someInstance
,其值实际上是
SomeType
2的一个实例,并且
args
Array
的一个合适实例,那么什么时候有理由选择下面的一个

SomeType.prototype.someMethod.apply(someInstance,args);
someInstance.someMethod.apply(someInstance,args);
类似地,如果
arg1
arg2
。。。是一系列的值,什么时候有理由选择下面的一个或另一个

SomeType.prototype.someMethod.bind(someInstance,arg1,arg2,…);
绑定(someInstance,arg1,arg2,…);

1假设所有其他事情都是相同的,我假设
SomeType.prototype.someMethod…
表单的一个可能好处是,它们可以避免只为获取其
someMethod
而创建变量的需要。例如,在
sorted\u copy
的版本1中,可以不用定义
copy
变量(即函数体的第二行),只返回
Array.prototype.sort.apply(Array.slice(),extra\u args)
。上面的规定是,
someInstance
变量的存在应被视为给定的,只是为了考虑
SomeType.prototype.someMethod…
的这一小部分可能的好处


2当然,不用说方法
someInstance.someMethod
是它继承的,因为它是
SomeType
的一个实例,否则这篇文章的问题就变得无关紧要了。

Array.prototype.sort.
someArray.sort.
(注意后面的点)是完全一样的,所以没有区别
Array.prototype.sort()
someArray.sort()
是不同的,但这是另一个问题


出于性能方面的考虑,最好使用
Array.prototype
,因为您可以将其缓存在命名空间中,请参见,例如,

使用
.apply()
.bind()
时,两者之间没有明显的区别。对于您的
.call()
示例,如果
someInstance
实际具有
someMethod
,您只需执行
someInstance.someMethod(arg1,arg2,…)。根本不需要
.call()
。@斜视:谢谢!我倾向于将
apply
call
bind
(有点自动)视为一个群体,但在阅读您的评论时,我发现这个问题对
call
没有多大意义。哦!我将编辑我的帖子以消除这种情况。正如您所知,ECMAScript 6有,所以您可以执行
函数排序的复制(数组,…额外参数){
,然后它有,所以
返回数组.slice().sort(…额外参数)