Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是显式的;。原型;真的需要吗?_Javascript - Fatal编程技术网

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
是否被重新定义,它都会工作,依我看,这是永远不会发生的。它也比较短。。。就是这样。(微观优化):)