3

我只是在阅读这个关于 Javascript 中散列的答案,虽然它肯定比接受的答案快,但它需要原型reduce上的函数。Array

检查reduce函数是否存在很容易;但是,虽然我所做的(并且已经看到的)大多数检查都是针对原型进行检查的,但它只是让我想知道:检查实例本身的含义是什么?为什么原型检查似乎更受青睐?

// i.e.

if (!!Array.prototype.reduce) { }
// vs
if (!![].reduce)

实例肯定需要一个实例,所以这是一回事,但就是这样吗?

4

2 回答 2

3

刚刚运行了一个基准测试:http: //jsperf.com/prototype-vs-instance-property-check

Array.prototype.reduce由于实例化了一个空数组,因此速度提高了 3 倍,但实际上,绝对没有区别,因为这些检查几乎总是一次性检查,而不是在一直运行的代码中。

我个人已将其减少到[].method多年。我对Array.prototype.slice.call( .. )vs之类的东西也做同样的事情[].slice.call( ... ),而且这些东西的调用频率远不止一次。

但请注意,这仅在 上有效Array,因此您实际上并没有节省很多。

于 2013-06-25T01:27:56.677 回答
2

第二个版本涉及不必要地实例化一个空数组。当您可以只询问原型本身而不实例化任何东西时,为什么要这样做?

于 2013-06-25T01:18:52.207 回答