使用 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 编码有一段时间了,可以理解一些概念,但对我来说并不是一切都清楚。
我有一个粗略的了解。我觉得在全局空间中 this 指向窗口,因此第一行输出很清楚。对于第二行,我认为由于函数 out 是在 f 上调用的,所以 this in out 的值是 f。对于第三个,我的感觉是,通过调用输入为 b 的函数,-this 的值被设置为 b。对于第四个 bar 是一个全局对象,它的字典中没有名为“num”的成员。
我的理解正确吗?有人可以在这个程序的上下文中解释“this”和“prototype”的作用吗?我发现原型的语法有点晦涩。当我在 gmail 窗口中按 F12 并将程序粘贴到那里时,也在 chrome 中。第三行输出未定义,不是 2。但在 jsfiddle 中是 2。这似乎有点令人毛骨悚然。为什么不一样?