Douglas Crockford http://javascript.crockford.com/private.htmlによると、私の理解が正しければ、「特権」メソッドは「パブリック」メソッドとして知られているものに似ています。「パブリック」メソッドは少し異なります。
これが私がそれを理解する方法です:
「特権」メソッドは、残りのプライベート変数が定義されたときにクロージャー内で定義されるため、プライベート変数にアクセスできます。
var C = function(){ var private; this.privilegedMethod = function(){ /* blah blah */ }; } var cObj = new C();
「パブリック」メソッドは、プロトタイプを通じて、オブジェクト自体の外部にあるオブジェクトに追加されるメソッドです。
var C = function(){ /* blah blah */ } C.prototype.publicMethod = function(){ /* blah blah */ }; var cObj = new C();
これらの「特権」と「公」の定義は非常に紛らわしいと思います。オブジェクト指向プログラミングからわかるように、「特権」メソッドは実際にはパブリックメソッドにすぎないと思います。そして、「パブリック」メソッドは別のものとして名前を付ける必要があると思います。考えてみると、これは奇妙なタイプの関数であり、オブジェクトのメンバーですが、他のプライベート変数にはアクセスできません。つまり、カプセル化には寄与しません。これは、オブジェクトの独立したヘルパー メソッドのようなものです。
だから私は疑問に思っていました.なぜダグラス・クロックフォードはこれらの紛らわしい用語を思いついたのですか? また、なぜ JavaScript コミュニティはこれらの用語を採用したのでしょうか? または、何か間違っている場合は、修正してください。