5

はい、私はこれが以前に尋ねられて答えられたのを見たことがあります。しかし、ここに私がまだ理解していないことがあります:

コンストラクター関数を作成し、関数のprototypeプロパティをオーバーライドしないと、自動constructorプロパティが関数のプロパティにぶら下がっていprototypeます。それはMyConstructor.prototype.constructor === MyConstructor=>本当です。偉大な。しかし、独自のオブジェクトでオーバーライドし、プロパティprototypeにパッチを適用しないとどうなりますか? 現在は に存在せず、参照先がプロトタイプ チェーンの上方にしか見つからない場合、それは=> true です。罰金。そう...constructorconstructorprototypeMyConstructor.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

それは純粋なデバッガーの魔法ですか?

4

1 に答える 1

0

おそらく解決策は、プロトタイプをカスタムオブジェクトに設定しないことでしょうか? カスタム オブジェクトのすべてのプロパティをループし、それらを既存のプロトタイプにプロパティとして追加して、コンストラクタなどの元のプロトタイプ オブジェクトのすべてのプロパティを保持することができます。

于 2012-05-11T22:03:02.247 に答える