2

多くの JavaScript 開発者が、次のようなプロパティを単純に返すメソッドを作成していることを発見しました。

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

prop は公開されており、次のようにアクセスできます。

var a = obj.prop;

さらに、メソッドを使用してオブジェクト プロパティにアクセスすると、直接アクセスするよりも 121 倍遅いことがわかりました (Firefox の場合)。

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...)

私の質問は、常にプロパティを返すメソッドを作成する必要があるか、それともプロパティに直接アクセスできるかということです。それはアンチパターンですか?

4

1 に答える 1

0

はい、アンチパターンです。js にはクロスブラウザになるネイティブのゲッターとセッターがないため、次のような独自のゲッターとセッターを作成する必要があります。

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

はい、引き続きこの prop に直接アクセスできますが、その必要はなくなりました。それについてもっと。このようにして、クロージャーを介してプライベート プロパティを作成できます。

function Foo() {
   var __yourPrivateProp = 'Bar';
   return {
           getyourPrivateProp: function () {
               return: __yourPrivateProp
           }
   };
}
于 2012-10-15T09:47:06.000 に答える