Javascript 是显式的;。原型;真的需要吗?
我经常在别人的剧本中看到这样的东西:Javascript 是显式的;。原型;真的需要吗?,javascript,Javascript,我经常在别人的剧本中看到这样的东西: bar = Array.prototype.slice.call(whatever, 1) 但是,以下较短的符号也适用: bar = [].slice.call(whatever, 1) 这两种结构完全等效吗?是否有不同对待它们的引擎(浏览器)?是的,完全相同 碰巧通过.prototype的访问速度稍快,因为不需要创建新的对象实例。然而,这就是我们所说的微观优化 完全摆脱深度链接的一个好方法是调用Function.prototype.bind 范例 (
bar = Array.prototype.slice.call(whatever, 1)
但是,以下较短的符号也适用:
bar = [].slice.call(whatever, 1)
这两种结构完全等效吗?是否有不同对待它们的引擎(浏览器)?是的,完全相同
碰巧通过.prototype
的访问速度稍快,因为不需要创建新的对象实例。然而,这就是我们所说的微观优化
完全摆脱深度链接的一个好方法是调用
Function.prototype.bind
范例
(function( slice ) {
slice( whatever, 1 );
}( Function.prototype.call.bind( Array.prototype.slice )));
严格来说,它们并不等同。这种结构:
[].slice.call(whatever, 1)
在堆上分配数组的新实例只是为了从中获取属性。
所以它有副作用-在堆中留下垃圾。作为旁注,
[].slice.call(…)
对数组没有任何假设。无论Array
是否被重新定义,它都会工作,依我看,这是永远不会发生的。它也比较短。。。就是这样。(微观优化):)