An interesting interview question

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function Foo() {
getName = function () { alert(1); };
return this;
}

Foo.getName = function () { alert(2); }

Foo.prototype.getName = function () { alert(3); }

var getName = function () { alert(4); }

function getName() { alert(5); }

Foo.getName(); // 2
getName(); // 4
Foo().getName(); // 1
getName(); // 1
new Foo.getName(); // 2
new Foo().getName(); // 3
new new Foo().getName(); // 3

请写出上面代码执行的结果,并解释原因