2015-10-08 3 views
24

私は、仕事場の小さな勉強会の一員で、JavaScriptが何をするのかをよりよく把握しようとしています。オブジェクトについての最近の議論では、オブジェクトのパブリックメソッドはオブジェクトがインスタンス化されるたびに再作成され、オブジェクトのプロトタイプに割り当てられたメソッドは一度作成され、すべてのインスタンスによって継承されることがわかりました。私が理解していることから、パブリックメソッドとプロトタイプに割り当てられたメソッドの両方が公にアクセス可能です。なぜJavaScriptオブジェクトでパブリックメソッドを使用するのですか?

プロトタイプに追加することが明らかに、より効率的である場合で、すべてのパブリックメソッドを作成するなぜわざわざ私が持っている問題は、その後、ありますか?パブリックメソッドは、プロトタイプには何のメリットがないのですか?これを具体的に答える

+0

プロトタイプ添加があると、同じクラスの他の目的のために同様の方法(ここで関数)を作成します追加されました。例えば、私は 'var name = new Student()'を持っていて、 'var name2 = new Student()'にもアクセスできるようにプロトタイプを追加しました。 –

+1

@AkshayKhandelwal OPが 'this.GetName = function(){...} 'を呼び出すと、両方からアクセスすることができますが、これは"毎回再作成 "されます。 –

+1

他の同様の質問:[直コンストラクタでメソッドを定義する対、プロトタイプを使用する利点?](http://stackoverflow.com/questions/4508313/advantages-of-using-prototype-vs-defining-methods-straight-inコンストラクタ?rq = 1) –

答えて

24

のパブリックメソッドを何の利点は、プロトタイプがないことを提供しますか?

方法は、コンストラクタ内の添加は、例えば、個人情報へのアクセスを有する:オブジェクトへ

function Student() { 
    var name = 'Bob'; 
    this.GetName = function() { 
     return name; 
    } 
} 

Student.prototype.SomeOtherPublicMethod = function() { 
    //no access to name 
} 
+0

これは意味があります、@ジェームズ・ソープ。 – AurumPotabile

+0

"クラス"を自己実行関数にラップし、プライベートメソッドとフィールドをコンストラクタから移動しない限り。 – Kroltan

+0

@Kroltanプロトタイプメソッドがプライベート変数にアクセスできるようなものをどのように構築するのか興味がありますが、オブジェクトの各インスタンスには独自のデータがあります。 (本当に、皮肉... ...) –

関連する問題