Javascript 向阵列原型添加函数

Javascript 向阵列原型添加函数,javascript,arrays,Javascript,Arrays,为什么将这个简单的JavaScript函数添加到数组原型中会导致我的动画速度显著降低 注意:绘制单个帧确实需要使用大量数组。将您自己的函数添加到阵列原型中是否意义重大 Array.prototype.last = function() { return this[this.length - 1]; }; 这个答案假设代码已经被分析,并且在这里确定了瓶颈。如果不是这样,请先这样做:|| 下面的提示主要针对V8特定的优化,但通常也会提高其他发动机的性能 虽然功能相当,但我建议对last(

为什么将这个简单的JavaScript函数添加到数组原型中会导致我的动画速度显著降低

注意:绘制单个帧确实需要使用大量数组。将您自己的函数添加到阵列原型中是否意义重大

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

这个答案假设代码已经被分析,并且在这里确定了瓶颈。如果不是这样,请先这样做:||

下面的提示主要针对V8特定的优化,但通常也会提高其他发动机的性能


虽然功能相当,但我建议对
last()
进行两项更改:

  • 它应该是接受数组作为参数的静态方法,而不是
    array
    的成员方法
  • 应该这样
考虑到这一点,请尝试以下方法:

function last (array) {
  var lastIndex = array.length - 1;
  if (lastIndex === -1) return undefined;
  return array[lastIndex];
}
在这一点上,你可能会想

很酷,现在我可以对类似数组的对象(如
参数
)重复使用它了


如果您这样做,那么函数可以保持优化状态,否则优化器必须退出并使用效率较低的抽象,以便允许
数组
以外的类型作为输入。

我认为这不太可能单独削弱您的性能。您应该描述动画的功能以及运行方式和时间。最后,一般不赞成扩展原生类型的原型。您的函数不会导致速度减慢。至于我,我通常不愿意“扩展”语言通用的东西,比如数组。给我一个很好的函数,如上图所示。