Javascriptは毎日書きます.

908 ワード

function foo(){
    foo.abc=function(){alert(1)}
    this.abc=function(){alert(2)}
    abc=function(){alert(3)}
    var abc=function(){alert(4)}
}
foo.prototype.abc=function(){alert(5)};
foo.abc=function(){alert(6)}
var obj=new foo();
obj.abc();
foo.abc();
3はい、わかりました1
この問題の試験点は三つあります.
1.thisキーワード
2.関数運転時context構築
3.関数を第一の特徴として使用する
new foo()を実行して、fooのコンストラクタの中に、this.abc=function(){alert(2)};
だから、obj.abc()/->alert(2);
また、fooコンストラクタには、foo.abc=function(){alert(1)};
だから、foo.abc()/->alert(1):
この問題の前には声明段階があります.最後から3行目まで実際の構造関数を実行する段階に入ります.
bbjはfooコンストラクタの例示的なオブジェクトであり、abcメソッドを呼び出したときに、インスタンス方法を優先的に検索し、abcの例示的な方法が見つからない場合、プロトタイプチェーン上でabcという方法が存在するかどうかを検索し続けます.プロトタイプチェーンの先端まで.本例では方法の例があるので、戻り値は2.
foo.abc()はなぜ6ではないですか?fooコンストラクタを実装すると、その関数のfoo.abc声明が後の声明を覆っているので、戻り値は1です.
ソース:http://www.csser.com/question/4f69af96c1bf83017600032d