真的需要明确的“.prototype”吗?

时间:2013-04-11 15:50:22

标签: javascript

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

bar = Array.prototype.slice.call(whatever, 1)

但是,以下较短的符号也可以正常工作:

bar = [].slice.call(whatever, 1)

这两个结构完全相同吗?是否存在以不同方式对待它们的引擎(浏览器)?

2 个答案:

答案 0 :(得分:5)

是的,完全等同。

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


完全摆脱深层链接的好方法是调用Function.prototype.bind

实施例

(function( slice ) {
    slice( whatever, 1 );
}( Function.prototype.call.bind( Array.prototype.slice )));

答案 1 :(得分:1)

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

[].slice.call(whatever, 1)

在堆上分配新的数组实例只是为了从中获取属性。 所以它有副作用 - 在堆中留下垃圾。