最近、JSでOOPを実行する方法についてかなり考えています。特に、カプセル化と継承に関してはそうです。
Crockfordによれば、classicalはnew()により有害であり、prototypeとclassicの両方が制限されています。これらのコンストラクターの使用は、カプセル化にクロージャーを使用できないことを意味します。
最近、私はカプセル化について次の2つの点を検討しました。
カプセル化するとパフォーマンスが低下します。各オブジェクトのメソッドには異なるクロージャーがあるため(各オブジェクトには異なるプライベートメンバーがあるため)、プロトタイプではなく各メンバーオブジェクトに関数を追加できます。
カプセル化によって、醜い「var that = this」の回避策が強制され、プライベートヘルパー関数が接続されているインスタンスにアクセスできるようになります。それか、毎回privateFunction.apply(this)でそれらを呼び出すようにしてください。
私が言及した2つの問題のいずれかの回避策はありますか?そうでない場合でも、カプセル化はそれだけの価値があると考えていますか?
補足:Crockfordが説明する機能パターンでは、new()とconstructor.prototypeの使用を完全に忘れているため、パブリックメンバーにのみ触れるパブリックメソッドを追加することもできません。古典的な継承とnew()を使用するだけでなく、Super.apply(this、arguments)を呼び出してプライベートメンバーと特権付きメソッドを初期化するハイブリッドアプローチは優れていますか?
O(1)
するようなものですO(n)
n = 2