javascript是基于prototype来实现继承的。对象可以访问位于prototype中的方法,也可以访问自身的方法。那么,两种情况下,函数的执行性能会有什么差别。

下面记录了一个小实验,测试代码已经上传的到这里

jsperf.com是一个在线测试javascript性能的网站,按照其要求设置好要测试的代码,然后改网站会显示代码执行的结果。

Benchmark.prototype.setup = function() {
  function Obj() {}

  Obj.prototype.MethodInPrototype = function(i) {
    if (i++==20000) {
      console.log("MethodInPrototype end");
    }
  }

  var Xobj = function() {
    this.MethodInThis = function(i) {
      if (i++==20000) {
        console.log("MethodInThis end");
      }
    }
  }
};

我们分别调用两种方法,看看他们的执行速度。

for (var i = 0; i < 20000; i++) {
    var b = new Xobj();
    b.MethodInThis(i);
}

for (var i = 0; i < 20000; i++) {
    var o = new Obj();
    o.MethodInPrototype(i);
}

可以看到prototype里面方法的执行速度快很多。但是,方法还是应该属于对象本身,不能因为单纯的性能考虑,就把方法都放到prototype里面。,我们应该谨慎使用prototype,只在合适的情况下才使用,例如希望所有子类都拥有共同的方法。

发表评论

电子邮件地址不会被公开。 必填项已用*标注