调用Array的继承方法(推送)时的性能问题

时间:2015-07-22 06:13:41

标签: javascript arrays prototypal-inheritance

我试图通过继承内置Array构造函数的属性和方法来创建Stack构造函数。像这样的东西 -

var Stack = function(){};

Stack.prototype = [];
Stack.prototype.constructor = Stack;

然后,我尝试以毫秒为单位检查性能,以便在数组中推送1000000个数据并在新创建的堆栈构造函数中推送相同数量的数据。

以下是测试的结果 -

  

"在数组中以ms为单位的时间 - > 11"

     

"在堆栈中以毫秒为单位的时间 - > 261"

我明白,push方法需要在原型链中查找,但差异仍然很大。有什么方法可以改善表现吗?

我也试过在Stack构造函数中添加push方法,但它对性能改进几乎没有影响。

Stack.prototype.push = function(data){
    Array.prototype.push.call(this, data);
}

我为同一个问题创建了Fiddle

1 个答案:

答案 0 :(得分:0)

我仍然不知道确切的原因,但以这种方式定义Stack会产生巨大的差异。但我假设将push方法绑定到this对象需要花费很多时间。

var Stack = function(){
    this.arr = [];
    this.push = function(elem) {
        this.arr.push(elem);
    }
};

输出代码段

Output Snippet

仍在挖掘这个问题,很快就会有更新。