5

C# プログラマーとして、私はプライベートにすることができ、プライベートにするべきものをプライベートにする習慣があり、JS 型がすべてのプライベートな部分を私にさらすと、いつも奇妙な気分になります (そして、その気持ちは「興奮」しません)。 )。draw内部的にdrawBackgroundandを呼び出すメソッドを持つ型があるdrawForegroundとします。これは、単独で呼び出されても意味がありません。これをどのように実装すればよいですか?

オプション1

Foo = function(){
  this.draw();  
};

Foo.prototype.draw = function(){
  this.drawBackground();
  this.drawForeground();
};

Foo.prototype.drawBackground = function(){};
Foo.prototype.drawForeground = function(){};

オプション 2

Foo = (function(){

  var constructor = function(){
    this.draw();
  };

  var drawBackground = function(){};
  var drawForeground = function(){};

  constructor.prototype.draw = function(){
    drawBackground.call(this);
    drawForeground.call(this);
  };

  return constructor;

})();

もちろん違いは、最初の例ではdrawBackgroundanddrawForegroundメソッドがパブリック API の一部であるのに対し、2 番目の例では外部に隠されていることです。それは望ましいことですか。どちらを優先する必要がありますか? C# の習慣を Javascript に適用するのは間違っていますか? Javascript ですべてを拡張可能にしてオーバーライド可能にする必要がありますか? そして、のパフォーマンスへの影響は.call(this)何ですか?

4

1 に答える 1

7

(悪名高い) 有名な Camel の本から引用された Perl 開発者の間でよく知られている言葉があります。ライブラリの開発者として、パブリック API とプライベート API を区別したい場合、それは素晴らしいことです。それを行い、それを文書化します。コードの呼び出し元は、どれがどれであるかを知っている必要がありますが、呼び出す必要がないと思われるものを呼び出すことに決めた場合は、ばかのように自由に振る舞う必要があります。オブジェクト指向のバックグラウンドからすれば、それは異端ですが、スクリプト言語では、それが彼らのやり方です。

これに対する答えは少し主観的ですが、JavaScript を作成していて、.NET でコーディングしていた場合にプライベートになるメソッドまたは変数がある場合は、"prv_" や「p_」または単に「_」...あなたのボートに浮かぶものは何でも。こうすることで、これは非公開であることが意図されており、ユーザーの下から変更される可能性があることをユーザーに伝えました。そうすれば、彼らがとにかくあなたのプライベート メソッドを呼び出すことを選択した場合、そのあいまいなコードは痛い親指のように突き出ます.

于 2010-07-10T22:06:41.240 に答える