質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

Q&A

解決済

1回答

1575閲覧

プロトタイプオブジェクトとオブジェクトの関係

aaaaaaaa

総合スコア501

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

0グッド

0クリップ

投稿2016/08/19 11:14

オブジェクトが生成されると同時にObject.prototypeを継承したプロトタイプオブジェクトが作られます。
その生成されたオブジェクトを実体化すると実体化したインスタンスは、プロトタイプオブジェクトの参照を持つことが出来ます。
オブジェクトとこのプロトタイプオブジェクトの関係は、片方が生成されるともう一方も生成されるだけなのでしょうか。
オブジェクトとプロトタイプオブジェクトには、どのような関係があるのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

オブジェクトが生成されると同時にObject.prototypeを継承したプロトタイプオブジェクトが作られます。

いえ、オブジェクトの生成前からプロトタイプオブジェクトは存在して、オブジェクトの生成の際には結び付けられるだけです。

具体的には、コンストラクタとなる関数の.prototypeに入るオブジェクトが、それぞれのインスタンスのプロトタイプ(多くの処理系では__proto__としてアクセス可能)になりますが、途中でオブジェクトごと入れ替えるような荒業を取らないかぎり、すべて同じオブジェクトです。リテラルで作ったオブジェクトや配列も、Object.prototypeArray.prototypeをプロトタイプとして使います。

そのため、あとからObject.prototypeへメソッドを追加すれば、継承する全オブジェクトにメソッドを追加できます(もっとも、このような手法は「プロトタイプ汚染」と呼ばれ、現代では禁じ手に近い扱いとなっています)。

投稿2016/08/19 13:59

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aaaaaaaa

2016/08/22 08:28

ご回答有難うございます。 例えばMyclassというオブジェクトを生成したとしても.prototypeは、生成する前から存在し、生成されたので.prototypeがMyclass.prototypeとして紐づけられるわけですね。 同じオブジェクトというのは、コンストラクタの.prototypeとインスタンスの__proto__で参照できるオブジェクトのことですか。それとも、.prototypeと名のつくオブジェクトすべてのことですか。
maisumakun

2016/08/22 08:42

もちろん、Object.prototypeとArray.prototypeは別のオブジェクトです。一方で、すべての配列の.__proto__は、Array.prototypeと同一のオブジェクトです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問