function Foo() {
getName = function () { console.log(1)}; //会修改全局的下的getName
return this;// 构造函数的返回值值得注意,如果是引用类型,则得到引用数据,null除外
}
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();//2
getName(); // 4
Foo().getName(); // 1
getName();// 1
new Foo.getName(); // 2 这里是new了一个Foo.getName函数,并没有先执行Foo.getName()在去执行new操作
new Foo().getName(); // 3 (new Foo()).getName() 此时的getName是找到Foo构造函数的原型对象上的getName属性
new new Foo().getName(); // 3 new ((new Foo()).getName)();
/*******************升级版********************/
// function Foo() {
// this.getName = function() {
// console.log(3);
// return {
// getName: getName//这个就是第六问中涉及的构造函数的返回值问题
// }
// };//这个就是第六问中涉及到的, JS 构造函数公有方法和原型链方法的优先级
// getName = function() {
// console.log(1);
// };
// return this
// }
// Foo.getName = function() {
// console.log(2);
// };
// Foo.prototype.getName = function() {
// console.log(6);
// };
// var getName = function() {
// console.log(4);
// };
// function getName() {
// console.log(5);
// } //答案:
// Foo.getName(); //2
// getName(); //4
// console.log(Foo())
// Foo().getName(); //1
// getName(); //1
// new Foo.getName(); //2
// new Foo().getName(); //3
// //多了一问
// new Foo().getName().getName(); //3 1
// new new Foo().getName(); //3