通过变量赋值或调用函数访问属性?

时间:2015-08-09 09:57:53

标签: javascript performance

我正在阅读Airbnb风格指南中的accessing object properties as variable部分,该指南说它很适合访问以下属性

var luke = {
  jedi: true,
  age: 28
};

function getProp(prop) {
  return luke[prop];
}

var isJedi = getProp('jedi');

所以我定义了一个像bellow

这样的通用函数
function getProp(obj, prop) {
   if (obj.hasOwnProperty(prop)) {
       return obj[prop];
   } else {
       var msg = prop + ' is not a property of the object' + 
                 'you are trying to access';
       throw Error(msg);
   }
}

并致电

var isJedi = getProp(luke, 'jedi');

调用函数访问对象属性与仅在需要的变量中分配它会对性能产生什么影响?

1 个答案:

答案 0 :(得分:5)

  

调用函数访问对象属性与仅在需要的变量中分配它会对性能产生什么影响?

从绝对意义上说,理论上它是巨大的,因为你正在做所有的工作,调用一个函数,传递参数,创建一个新的执行上下文等等。

然而,when I measured this因为我担心使用forEach的影响,我发现函数调用真的很快,即使在最慢的JavaScript引擎上我也是如此当时可以找到(IE6中的JScript)。现代引擎比IE6的JScript更快

我更大的担忧不是表现,而是:

  1. 对代码可读性的影响,

  2. (对于您展示的特定getProp),您正在禁用JavaScript的一个关键功能:原型链(要求该属性为“拥有”)属性)

  3. 有关可读性的更多信息:

    通常需要访问嵌套对象层次结构,例如:

    var n = obj.foo.thingies.length;
    

    考虑使用getProp

    的情况
    var n = getProp(getProp(getProp(obj, "foo"), "thingies"), "length");
    
    坦率地说,这几乎是不可读的。

    除非非常好的理由这样做,否则我会以正常方式使用属性。

相关问题