明确的“。原型”真的需要吗?

vanimi 发布于 2019-03-09 javascript 最后更新 2019-03-09 14:31 3 浏览

我经常在其他人的脚本中看到类似这样的东西:

bar = Array.prototype.slice.call(whatever, 1)
但是,以下简短的表示法也可以正常工作:
bar = [].slice.call(whatever, 1)
这两个结构是完全等价的吗?是否有引擎(浏览器)对待它们的方式不同?
已邀请:

zamet

赞同来自:

是的,完全相同。 碰巧是通过.prototype的访问速度稍快,因为不需要创建新的对象实例。然而,这就是我们所说的微优化。


完全摆脱深层链接的好方法是调用Function.prototype.bind。 例
(function( slice ) {
    slice( whatever, 1 );
}( Function.prototype.call.bind( Array.prototype.slice )));

tut

赞同来自:

严格来说,它们并不等同。这种结构:

[].slice.call(whatever, 1)
在堆上分配新的数组实例只是为了从中获取属性。 所以它有副作用 - 在堆中留下垃圾。