为什么检查原型而不是实例?

时间:2013-06-25 01:16:32

标签: javascript

我刚刚阅读this answer regarding hashing in Javascript,虽然它肯定比接受的答案快,但它需要reduce原型上的Array功能。

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

// i.e.

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

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

2 个答案:

答案 0 :(得分:3)

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

由于空数组的实例化,

Array.prototype.reduce快3倍,但实际上,由于这些检查几乎总是一次性检查,因此绝对没有区别,而不是始终运行的代码。 / p>

我个人已经将此缩减为[].method多年。我对Array.prototype.slice.call( .. )[].slice.call( ... )之类的内容采取了同样的做法,并且这些内容的调用次数远远超过一次。

但请注意,这仅适用于Array,因此您实际上并没有节省太多。

答案 1 :(得分:2)

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