构造函数 多个new new Foo(),这样的怎么执行,希望讲下原理(面试碰到的)

function Foo(){
    getName = function(){alert(1)}
    return this;
}

Foo.getName = function(){alert(2)}
Foo.prototype.getName = function(){alert(3)};
var getName = function(){alert(4)};
function getName(){alert(5)}

// 请回答下面返回
Foo.getName() // 2
getName() //4
Foo().getName() //1
getName() //1
new Foo.getName()//2
new Foo().getName() //3
new new Foo().getName() //
//emmmmm 居然只有最后一个没回答上来,连续new 就是一个ne w

// 例如 ???为撒子会报错哦!
function Sht(){this.bitch = "yo";return this}

var sht = new new new new new Sht();

希望解释下:
new new Foo().getName() 为撒返回3;
new new new new new Sht(); 为啥报错了

阅读 2k
1 个回答
new new Foo().getName()
    ^^^^^^^^^
    obj
 ====>
new obj.getName()

obj.__proto__ === Foo.prototype
obj.getName 就是 Foo.prototype.getNameFoo.prototype.getName 是一个构造函数,被 new 调用,执行 alert(3)

这里第一次构造(后一个 new )的构造函数是 Foo,第二次构造(前一个 new )的构造函数是 new Foo().getName ,也就是 Foo.prototype.getName

==========================

new Sht() 得到一个普通对象,不是构造函数,再 new (new new Sht())就不对了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题