在javascript中返回属性VS属性直接访问的方法

时间:2012-10-15 09:33:14

标签: javascript performance design-patterns object properties

我发现许多javascript开发人员创建的方法只返回如下属性:

function Obj (prop) {
    this.prop = prop; // public
}
Obj.prototype.getProp = function () {
    return this.prop;
};

虽然prop是公开的,可以像这样访问:

var a = obj.prop;

此外,我发现使用方法访问对象属性比直接访问它(在Firefox中)慢121倍

var a, b,
    obj = new Obj(1);

a = obj.prop;
// ~6ns on Chrome
// ~5ns on Firefox

b = obj.getProp();
// ~6ns on Chrome (no difference)
// ~730ns on Firefox (122x slower...)

所以我的问题是:我们应该始终创建返回属性的方法,还是可以直接访问属性?那是反模式吗?

1 个答案:

答案 0 :(得分:0)

是的,它是反模式。由于js没有本机的getter和setter,它们将是crossbrowser,但是,你应该创建自己的getter和setter,如:

Obj.prototype.getProp = function () {
    return this.prop;
};

是的,您仍然可以直接访问此道具,但现在您不必这样做。更多内容。这样您就可以通过闭包创建私有属性:

function Foo() {
   var __yourPrivateProp = 'Bar';
   return {
           getyourPrivateProp: function () {
               return: __yourPrivateProp
           }
   };
}