javascript - Array.prototype.sort.apply( someArray, args ) 与 someArray.sort.apply( someArray, args )

标签 javascript prototype

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 );
}

更一般地说,假设我们手头有一个变量someInstance1,它的值确实是SomeType2 的一个实例,并且 argsArray 的某个合适实例,那么什么时候有理由优先选择以下其中一个?

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 变量(即函数体的第二行),而只返回 Array.prototype。 sort.apply(array.slice(), extra_args)。上面规定 someInstance 变量的存在应该被认为是给定的,只是为了利用 SomeType.prototype.someMethod... 的这个小可能的好处形成了考虑到这个问题的目的。

2 当然,someInstance.someMethod 方法是 SomeType 的一个实例,它继承了这个方法是不言而喻的,否则这篇文章的问题就变得微不足道了。

最佳答案

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

出于性能原因,使用 Array.prototype 可能更好,因为您可以将其缓存在您的命名空间中,参见例如underscore sources .

关于javascript - Array.prototype.sort.apply( someArray, args ) 与 someArray.sort.apply( someArray, args ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32156769/

相关文章:

javascript - jQuery JSON 解析问题

javascript - 使用请求/请求从浏览器发布文件

Javascript 字符串对象 V.S.只是字符串

javascript - 使用 Javascript 构造函数进行原型(prototype)设计

javascript - 如何访问从子类型调用的父类(super class)型中的js事件对象?

javascript - 使用原型(prototype)时,我需要将所有内容包装在 DOM 加载上吗?

javascript - 在现有 package.json 中安装新的依赖项

javascript - 如何在HTML背景中添加动画元素

javascript - Azure Functions bundle 和扩展、函数版本 - javascript 混淆 2.x、5.0.x+?

javascript - 作为对象属性调用函数时如何引用构造函数方法