首页 > 解决方案 > 向数组原型添加函数

问题描述

为什么将这个简单的 JavaScript 函数添加到数组原型会导致我的动画显着变慢?

注意要绘制单个帧确实使用了很多数组。将您自己的函数添加到 Array 原型中是否重要?

Array.prototype.last = function()
{
    return this[this.length - 1];
};

标签: javascriptarrays

解决方案


此答案假定代码已被分析并且此处确定了瓶颈。如果不是这种情况,请先这样做:Chrome | 火狐| 边缘

下面的技巧侧重于 V8 特定的优化,但通常也会提高其他引擎的性能。


虽然功能相同,但我建议对以下内容进行两项更改last()

  • 它应该是一个接受数组作为参数的静态方法,而不是Array.
  • 它应该避免越界访问

考虑到这一点,试试这个:

function last (array) {
  var lastIndex = array.length - 1;
  if (lastIndex === -1) return undefined;
  return array[lastIndex];
}

这个时候你可能会想

酷,现在我可以将它重新用于类似数组的对象,例如arguments.

如果您避免泛型使用,则函数可以保持优化,否则优化器必须退出并使用效率较低的抽象,以允许Array输入以外的类型。


推荐阅读