Array.prototype.sort.apply( someArray, args ) 与 someArray.sort.apply( someArray, args )
Array.prototype.sort.apply( someArray, args ) vs someArray.sort.apply( someArray, args )
sorted_copy
函数的以下两个实现之间是否存在实质性差异(注意:只有最后一行不同):
/* version 1 */
function sorted_copy ( array ) {
var extra_args = Array.prototype.slice.call( arguments, 1 );
var copy = array.slice();
return Array.prototype.sort.apply( copy, extra_args );
}
/* version 2 */
function sorted_copy ( array ) {
var extra_args = Array.prototype.slice.call( arguments, 1 );
var copy = array.slice();
return copy.sort.apply( copy, extra_args );
}
更一般地,假设我们手头有一个变量someInstance
1,它的值确实是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.someMethod.bind( someInstance, arg1, arg2, ... );
1 假设所有其他条件都相同,我认为 SomeType.prototype.someMethod...
形式是因为它们可以避免 创建 一个变量只是为了获得它的 someMethod
的需要。例如,在 sorted_copy
的版本 1 中,可以省去定义 copy
变量(即函数体的第二行),而只定义 return Array.prototype.sort.apply( array.slice(), extra_args )
。上面规定 someInstance
变量的存在应该被认为是给定的,只是为了这个问题的目的而考虑 SomeType.prototype.someMethod...
形式的这个小的可能好处。
2 当然,不用说方法 someInstance.someMethod
是它继承的方法,因为它是 SomeType
,否则这个post的问题就变得微不足道了。
Array.prototype.sort.
和 someArray.sort.
(注意后面的点)完全一样,所以没有区别。 Array.prototype.sort()
和 someArray.sort()
是不同的,但这是另一个问题。
出于性能原因,使用 Array.prototype
可能更好,因为您可以将其缓存在您的命名空间中,例如参见underscore sources.
sorted_copy
函数的以下两个实现之间是否存在实质性差异(注意:只有最后一行不同):
/* version 1 */
function sorted_copy ( array ) {
var extra_args = Array.prototype.slice.call( arguments, 1 );
var copy = array.slice();
return Array.prototype.sort.apply( copy, extra_args );
}
/* version 2 */
function sorted_copy ( array ) {
var extra_args = Array.prototype.slice.call( arguments, 1 );
var copy = array.slice();
return copy.sort.apply( copy, extra_args );
}
更一般地,假设我们手头有一个变量someInstance
1,它的值确实是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.someMethod.bind( someInstance, arg1, arg2, ... );
1 假设所有其他条件都相同,我认为 SomeType.prototype.someMethod...
形式是因为它们可以避免 创建 一个变量只是为了获得它的 someMethod
的需要。例如,在 sorted_copy
的版本 1 中,可以省去定义 copy
变量(即函数体的第二行),而只定义 return Array.prototype.sort.apply( array.slice(), extra_args )
。上面规定 someInstance
变量的存在应该被认为是给定的,只是为了这个问题的目的而考虑 SomeType.prototype.someMethod...
形式的这个小的可能好处。
2 当然,不用说方法 someInstance.someMethod
是它继承的方法,因为它是 SomeType
,否则这个post的问题就变得微不足道了。
Array.prototype.sort.
和 someArray.sort.
(注意后面的点)完全一样,所以没有区别。 Array.prototype.sort()
和 someArray.sort()
是不同的,但这是另一个问题。
出于性能原因,使用 Array.prototype
可能更好,因为您可以将其缓存在您的命名空间中,例如参见underscore sources.