【每天进步一点点】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