我试图通过继承内置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。
答案 0 :(得分:0)
我仍然不知道确切的原因,但以这种方式定义Stack
会产生巨大的差异。但我假设将push
方法绑定到this
对象需要花费很多时间。
var Stack = function(){
this.arr = [];
this.push = function(elem) {
this.arr.push(elem);
}
};
输出代码段
仍在挖掘这个问题,很快就会有更新。