背景: JavaScriptでは、各オブジェクトタイプのコンストラクター関数にprototype
プロパティがあります。prototype
オブジェクトを参照する、そのプロトタイプチェーン内の次のステップアップとしてそれぞれ構成されたオブジェクトの使用。あるタイプを別のタイプから組み込みたい場合prototype
は、子タイプのを親タイプの新しいインスタンスに設定できます。
例えば:
var Parent = function() { /* constructor business */ }
Parent.prototype.parentProp = "some parent property";
var Child = function() { /* constructor business */ }
Child.prototype = /*** !! Some prototype object goes here !! ***/
私の質問はSome prototype object goes here
、上記のコードの「」の場所にどのコードを配置する必要があるかを尋ねています。私の最初の本能は親のインスタンス(つまりnew Parent()
)を構築することですが、これはあるオブジェクトのプロトタイプを別のオブジェクトのプロトタイプにコピーする安全な方法ですか?、1人のユーザーが書き込みます:
いいえ、
new bar()
プロトタイプオブジェクトには使用しないでください。
(...これは多くのSOの回答やコメントで見た意見ですが、これが現時点で手にしている唯一の例です。)
もう1つのオプションは、Object.create(Parent.prototype)
として使用することChild.prototype
です。私の知る限り、これによって新しいParent
インスタンスも作成されますが、Parent
コンストラクターは実行されません。
親タイプからプロトタイプオブジェクトを生成するときにコンストラクタ関数の実行を回避する必要がある理由を誰かが説明できますか?(おそらく複数の継承レベルで)発生するいくつかの重大な技術的問題はありますか?または、そのようなパターンは、プロトタイプのベストプラクティスと衝突するコンストラクタの誤用ですか(たとえば、プロトタイプの作成時にコンストラクタを実行すると、懸念の分離に違反します)?
Object.create
はまさに実装されている方法です。