Object getter / setter vs new constructor - 测试结果

时间:2014-09-27 23:42:37

标签: javascript object setter getter

我有一个问题。

我希望你关闭这个狗屎 - 很多人都是javascript-gods - 但他们写的是Ecmascript3 -
哈哈哈哈 - 如果你不明白Object.create()做什么,那么闭嘴@LJ_1102 !!!!

我已经在jsperf.com上做了一个测试,关于操纵一个对象的两种不同方式。

请不要和我讨论" object.create(p,pr)"和新实例()。

Object.create()是简单代码的未来和非常简单。

--->问题不是:需要我一个函数并设置原型和构造函数或需要我Object.create(原型,新属性)< ---这是一个问题信仰

我的问题:为什么Chrome和Firefox的搜索结果有很大差异?

我知道 - 两个不同的Javascript引擎。然而为什么如此不同?

--->link for testsite<---

测试:

    var obj = {
    name: "",
    get getName(){return this.name;},
    set setName(x){this.name = x;}
    };

    function func(x){
    var that = this;
    this.name = ""; 
    this.getName = function(){return that.name;};
    this.setName = function(x){that.name = x;};
    }

    // Chrome:   1,536,214 ops/sec
    // Firefox:  302,952 ops/sec

          var newObj = Object.create(obj);
          obj.setName = "svenskanda";
          obj.getName;


    // Chrome:  315,572 ops/sec
    // Firefox: 1,360,496 ops/sec

          var newObj = new func();
          newObj.setName("Alex");
          newObj.getName();

在Chrome中,Object.create() - getter / setter更快。

在Firefox中,新构造函数方法更快。

你能解释一下吗?

1 个答案:

答案 0 :(得分:1)

如果你想知道为什么存在这样的速度差异请查看源代码,我担心你不会找到一个同样知道完全相同的内部代码的chrome / firefox开发人员其他项目,即使你对这个答案做了什么?!

他们是两个完全不同的javascript引擎。

此外,你在'基准'中做了两件完全不同的事情。 Object.create的第一个参数是要创建的对象的原型,因此您使用Object.create创建的所有对象共享相同 名称<在您的情况下/ em>属性。在“构造函数”基准测试中,您将使用对象的每个构造构造成员方法。

首先要学会正确使用原型和相关方法,然后编写一些实际上遇到基于语言性能的性能问题的代码,然后分析代码并找出瓶颈。