关于原型函数的问题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| function Foo(){ getName = function(){ console.log(1) } return this; }
Foo.getName = function(){ console.log(2) }
Foo.prototype.getName = function(){ console.log(3) }
var getName = function(){ console.log(4) }
function getName(){ console.log(5) }
Foo.getName(); getName(); Foo().getName(); getName(); new Foo.getName(); new Foo().getName(); new new Foo().getName();
|
分析:代码执行 存在var 和匿名函数 所以变量提升 以下函数被提升到顶部;
1 2 3
| getName = function(){ console.log(5) }
|
函数执行
1) 执行 Foo 的 getName 方法 输出;
2) 执行的是 var getName = … 会将提升的函数覆盖;
3) 执行 Foo 函数之后又覆盖 getName, 接着调用 getName 函数,此时调用getName函数;
4) 执行 getName() 此时函数还是执行上一步的函数;
5) 此函数执行是考察运算符优先级;
6) 此函数执行同样考察运算符优先级, 但是此时new Foo() 是执行Foo的实例 由于Foo 实例里面没有getName 方法,所以会去原型上找protoType;
7) 此函数执行同样考察运算符优先级, 是前面两个的综合;