C / C ++、Javaでプログラムしたので、次のプログラムの出力を理解するのが難しいと感じています。
http://jsfiddle.net/iamrohitbanga/nubgw/
var foo = function() {}
foo.prototype.out = function() {
console.log(this.num);
}
var bar = function() {};
var f = new foo();
f.num = 1;
var b = new bar();
b.num = 2;
console.log(this); // 1
f.out(); // 2
foo.prototype.out.call(b); // 3
foo.prototype.out.call(bar); // 4
次の出力が表示されます
Window
1
2
undefined
私はしばらくの間javascriptでコーディングしていて、いくつかの概念を理解できますが、すべてが明確であるとは限りません。
私は大まかな理解を持っています。グローバル空間では、これはウィンドウを指しているので、出力の最初の行は明確です。2行目では、関数outがfで呼び出されているので、このinoutの値はfだと思います。3つ目は、入力をbとして関数を呼び出すことにより、-thisの値がbに設定されると感じています。4番目の1つのバーは、ディクショナリに「num」という名前のメンバーがないグローバルオブジェクトです。
私の理解は正しいですか?誰かがこのプログラムの文脈で「これ」と「プロトタイプ」の役割を説明できますか?プロトタイプの構文が少しわかりにくいと思います。また、GmailウィンドウでF12キーを押して、そこにプログラムを貼り付けると、Chromeで表示されます。出力の3行目は未定義で、2行ではありません。しかしjsfiddleでは2行です。少し不気味なようです。なぜ違うのですか?