昨日は、同様の問題が発生した書かれたすべての被験者のため、これは理由をブログ書くことはあります。
その最初のGETVALの機能が強化されているので、この質問は、()の出力は、5で、書かれたコメントなど、すべての最初の外観を、取るために今、この関数の呼び出しf.getval出力2、
。F()GETVAL()このステップでは、理解することがより重要です。
最初のステップ:関数f内のコードの最初の実装、関数Fは使用GETVAL varステートメントが存在しないので、等、それでは、代わりに関数fのグローバルプライベートメンバ関数になるGETVALこれはつまり、ウィンドウオブジェクトである」=返します。
第二段階:この場合、F()GETVALは())(window.getvalなり、出力が1日です
GETVAL第二の呼び出し:それはまた、出力される上記を参照。
新しいf.getval():「」新しいよりメンバーのアクセス優先順位ためには、我々は最初のお返しに=「新しい(f.getval)()、新しいFとして考えることができる、新しい実行するために、foo.getNameを行いました。例GETVAL出力2。
新しいF()GETVAL():.これはF()または新を実行するために主に躊躇している場合、新しい引数、第1新=「(新しいF())GETVALは、それがYesと呼ばれているため、です。 ()は、3の出力をFで独自のGETVALに見つけ、そのプロトタイプを見つける行かなかったので、F(上)GETVAL
新しい新しいF()GETVAL():.上記の新しいパラメータを優先ので、実行されます知ることができます。
最初のステップ:新しい(新しいF()GETVAL。)()
ステップ2:新しい((新しいF()).getval)()
最初の計算new foo()
新しい()の計算でコンテンツを取得するため、取得のgetName、呼。
すなわち、新しい((新しいF()).getval)()=「新しい(f.prototype.getval)()ので、出力が3です。