【每天进步一点点】js小题2019.01.09

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();

 

答案解释:

Foo.getName(); //2
getName(); //4
Foo().getName(); //函数Foo执行,返回this是指向window,window上的getName函数是打印1
getName(); //全局上的getName因为Foo函数的执行改变了,打印1
new Foo.getName(); //打印2。因为还是全局上的Foo.getName
new Foo().getName(); //new 完Foo(),Foo里的this指向自己,查找Foo身上的方法getName,但它自己没有所以到自己的原型上找。打印3

new new Foo().getName(); //new 完Foo(),Foo里的this指向自己,查找Foo身上的方法getName,但它自己没有所以到自己的原型上找。找到原型上的方法在new,打印3

 

posted @ 2019-01-09 13:47  red东  阅读(110)  评论(0编辑  收藏  举报