Javascriptのオブジェクトの「プライベート」プロパティが必要ですか?

最近、多くの記事(Habréだけでなく)で、クロージャーを介したJSのオブジェクトのプライベートプロパティのエミュレーションの例をよく見ます。 作成者は通常、 カプセル化などのOOPメカニズムを使用することでこれを説明します。これにより、プロパティに直接影響を与えることなく、そのメソッドのみでオブジェクトを使用した作業を保証します。



この記事では、このアプローチの長所と短所を客観的に検討し、誰もがそれを使用するかどうかを自分で決定できるようにすることを提案します。





ですから、まずは議論の対象です。 「コンストラクタ-プロトタイプ」リンクを使用してオブジェクトの作成を比較します(つまり、すべてのメソッドはプロトタイプに格納され、すべてのプロパティはコンストラクターによって作成されます)

function make_obj(a, b) {

 this.prop1 = a;

 this.prop2 = b;

}

make_obj.prototype = {

 method1: function(){...},

 method2: function(){...},

 methodN: ...

}




* This source code was highlighted with Source Code Highlighter.






( -, , , ).

function make_obj(a, b) {

 var prop1 = a;

 var prop2 = b;



 method1 = function(){...}

 method2 = function(){...}

 methodN = ...

}



* This source code was highlighted with Source Code Highlighter.








«» «», .



( ) «» . , , , .



this (property = 5 this.property = 5, ).





.





  1. , , , , , - . , — , .
  2. JavaScript, JScript ECMA-262 «», . , — . , «» — , . — .




, . ( ) (.. ). , 1000 , 15 , «» , «». IE6 250 , IE7 — 110. 15.



100-200 , - (.. «» , , ).



, , . 3-4 , + 25-50 , .



50 — ( ).





  1. «» private , protected (.. , ) .

    , .. , ( ).

  2. , this[(a > 2? 'max': 'min')]

    , .





  1. . , , , - ( , ).

    , .

  2. PHP5 , , private public, public protected — .

    JS, this. .





, , , , , 100%, .



, «» ( - ), .

, - ( ) , , , , (, - ).



All Articles