2017-08-28 1 views
1

Question1に自分自身を入れ子になった:機能は、プロトタイプ

私は私が気づいたJS、内のオブジェクトとコンストラクタのプロトタイプで実験した

function f(a) { 
    this.a = a; 
    this.x = 1 
} 

function f2(a) { 
    this.a = a; 
    this.x = 4 
} 

f2.__proto__ = f(9); 

var of2 = new f2(4); 

は何とかF2()のネストを作りますそのprototype -> constructorで自身が、私は(下記のように)無限のネスティングを持っている:

enter image description here

誰もそのような行動を説明できますか?それとも、ツールによって引き起こされるエラーなのでしょうか?

質問2: それが正常であれば、それはどのようにメモリ内で機能しますか?それは参照に取り組んでいるのですか?それとも、プロトタイプをコンストラクタに挿入するだけですか? 2番目の仮説が真実なら、なぜ私のコンピュータの記憶はまだ綺麗で燃えていないのですか?

+2

Prototypeオブジェクトは、それが属するコンストラクタへの参照を持っています。コンストラクターにはプロパティプロトタイプがあります。 PrototypeはConstructorへの参照を持ちます。つまり、 'f.prototype.constructor === f'です。あなたの質問に答えてください:これは正常です。 – dfsq

+0

**内部プロパティを設定しないでください!** –

+2

'f2 .__ proto__ = f(9);'は何も役に立ちません。あなたは 'f2'関数が継承するオブジェクトとして' undefined'を割り当てています。この操作はちょうど無視されています。 – spanky

答えて

1

これは正常な動作です。

function f() { 
this.a=0; 
} 

var obj= new f(); 

が同じループが発生します:ような何かobjのコンストラクタはf()であり、このコンストラクタのプロトタイプは、コンストラクタとしてf()を持ち、そしてそのプロトタイプは(Fを持っている)など...

1

その

look to the right ->    <- look to the left 

のように同じ無限の入れ子ので、実際にはかなり有限;)

prototype ->     <- constructor 

(ヒント:この回答は300pxスマートフォンで最適です。))

関連する問題