[解決済み] Javascriptのコンストラクタのプロパティの意味は何ですか?
質問
Javascript の OO に関する考え方を理解しようとしているところです。
constructor
プロパティについて混乱しています。特に
constructor
プロパティの意味を知りたいのですが、どうにもうまくいきません。例えば
function Foo(age) {
this.age = age;
}
function Bar() {
Foo.call(this, 42);
this.name = "baz";
}
Bar.prototype = Object.create(Foo.prototype);
var b = new Bar;
alert(b.constructor); // "Foo". That's OK because we inherit `Foo`'s prototype.
alert(b.name); // "baz". Shows that Bar() was called as constructor.
alert(b.age); // "42", inherited from `Foo`.
上記の例では、オブジェクト
b
は正しいコンストラクタが呼び出されたようです (
Bar
) - そして、age プロパティを
Foo
. では、なぜ多くの人がこれを必要な手順として提案するのでしょうか。
Bar.prototype.constructor = Bar;
明らかに、右の
Bar
コンストラクタ
は
を構築する際に呼び出されます。
b
このプロトタイプ プロパティにはどのような影響があるのでしょうか。オブジェクトが作成された後にどのコンストラクタが実際に呼び出されるかに影響を与えるとは思えないので、コンストラクタ プロパティを「正しく」設定することが実際にどのような違いを生むのかを知りたいと思っています。
どのように解決するのですか?
2020年9月更新
下記の回答はECMAScript3の頃のもので、ECMAScript6以降、前段は事実ではなくなっています。
constructor
プロパティが数カ所で使用されているからです。しかし、全体的な要点は今でも当てはまると思います。コメントで指摘してくれた T. J. Crowder に感謝します。現在の状況の全体像については、彼の回答を読んでください。
元の回答
その
constructor
プロパティは、内部的には何の実用的な違いもありません。コードが明示的にそれを使用する場合にのみ、それが役に立ちます。たとえば、各オブジェクトに、それを作成した実際のコンストラクタ関数への参照を持たせる必要があると判断した場合。
constructor
プロパティを明示的に設定する必要があります。
prototype
プロパティにオブジェクトを代入して継承を設定する場合です。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み】JavaScript版sleep()とは?)
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] オブジェクトの配列からReactコンポーネントをレンダリングする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] javascript の関数から `undefined` と `null` のどちらを返すのが良いのでしょうか?
-
[解決済み] JavaScriptで:hoverのCSSプロパティを変更する
-
[解決済み] Reactコンポーネントでthis.setStateを複数回使用するとどうなりますか?
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] jQueryの$という記号の意味は何ですか?
-
[解決済み] コールバック地獄とは何か、RXはそれをどのように、そしてなぜ解決するのか?
-
[解決済み] AJAX Mailchimp サインアップフォームの統合
-
[解決済み] JavaScriptのArray.sort()メソッドでシャッフルするのは正しいのか?
-
[解決済み] V8 Javascript エンジンのスタンドアロン実行
-
[解決済み] Fetch: ステータスがOKでない場合、プロミスを拒否し、エラーをキャッチするか?