私は最近、ちょうどprototype
の紹介を開始したjavascriptの本を読んできました。私はまた.prototype
と__proto__
のいくつかの他のstackoverflowの質問を見てきました、それらはすべて私のためにあまりにも先進的ないくつかの例があり、私はそれらを理解するのに困っています。今、この本は非常に混乱した方法でこれを説明しているので、私はここでそれの基本的な理解を求めると思った。私がちょうど作ったコードを聞きます.prototypeの簡単な使い方は何ですか?
function Person(firstname,lastname){
this.firstname = firstname;
this.lastname = lastname;
}
Person.prototype.getFullName = function(){
return this.firstname + " " + this.lastname;
}
var john = new Person('John','Doe');
console.log(john);
ここで私の混乱が発生するheres。私の理解では、舞台裏ではfunction
にはprototype
がありますが、キーワードnew
を使用するまでは実際には再生されません。
私の本から理解できることは、ここで.prototype
はPerson
関数にメソッドを追加できるということです。
クールです。だから私がconsole.log(john.getFullName());
をすれば、我々はJohn Doe
を得る。ニース!ちょうど疑われる通り。しかし、どうすればいいのですか?console.log(john)
はPerson
関数を指しており、firstname: 'John'
とlastname: Doe
を表示します。
ちょうど私がPerson.prototype.getFullName
で追加した方法には何が起こったでしょうか?なぜ我々はJohn
をログに記録するのですか?
私が理解しているように、あなたのコードはPersonのプロトタイプに関数を追加しています。代わりに 'console.log(this.prototype)'を使ってみたら、うまくいくはずです。または、未定義の例外をスローします。 –
別のユーザーを作成すると、var john2 = new Person( 'John2'、 'Doe');となります。私はgetFullNameを除くすべてを継承することができる方法はありますか?以来私はconsole.log(john2)それは私が今protoに追加したgetFullNameを継承する? –
@cresjoy、それを部分的に継承する方法はありません。 'john2 = new Person(' ... ')'を実行すると、 'Person.prototype'のすべてが継承されます。 'getFullName'をオーバーライドする場合は、いつでも 'john2.getFullName = function(){.. do something else ..}'を実行できます。これはPerson.prototypeを試す前にjohn2で最初に調べるように動作します。あなたがこれを行う場合、私は参照してくださいPerson –