はい、私はこれが以前に尋ねられて答えられたのを見たことがあります。しかし、ここに私がまだ理解していないことがあります:
コンストラクター関数を作成し、関数のprototype
プロパティをオーバーライドしないと、自動constructor
プロパティが関数のプロパティにぶら下がっていprototype
ます。それはMyConstructor.prototype.constructor === MyConstructor
=>本当です。偉大な。しかし、独自のオブジェクトでオーバーライドし、プロパティprototype
にパッチを適用しないとどうなりますか? 現在は に存在せず、参照先がプロトタイプ チェーンの上方にしか見つからない場合、それは=> true です。罰金。そう...constructor
constructor
prototype
MyConstructor.prototype.constructor === Object
Javascript デバッガー (Chrome など) で、コンストラクターのプロトタイプを独自のオブジェクトでオーバーライドし、そのコンストラクターのインスタンスを新たに作成してから、コマンド ラインでそのインスタンス変数を入力すると、Chrome が喜んで型を教えてくれるのはなぜですか? ? どうやってわかるの???つまり、コードで同じことを見つけるにはどうすればよいですか?
簡単な再現:
> function Foo() {}
undefined
> Foo.prototype.constructor === Foo
true
> Foo.prototype = {}
Object
> Foo.prototype.constructor === Foo
false
> f = new Foo()
Foo
> f
Foo
それは純粋なデバッガーの魔法ですか?