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