关于原型函数的问题:
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 和匿名函数 所以变量提升 以下函数被提升到顶部;
getName = function(){
console.log(5)
}
函数执行
- 执行 Foo 的 getName 方法 输出;
Foo.getName()
- 执行的是 var getName = … 会将提升的函数覆盖;
getName()
- 执行 Foo 函数之后又覆盖 getName, 接着调用 getName 函数,此时调用getName函数;
Foo().getName()
- 执行 getName() 此时函数还是执行上一步的函数;
getName()
- 此函数执行是考察运算符优先级;
new Foo.getName()
- 此函数执行同样考察运算符优先级, 但是此时new Foo() 是执行Foo的实例 由于Foo 实例里面没有getName 方法,所以会去原型上找protoType;
new Foo().getName()
- 此函数执行同样考察运算符优先级, 是前面两个的综合;
new new Foo().getName()