首先new Foo()得到一个空对象{} 第二步向空对象中添加一个属性getName,值为一个函数 第三步new {}.getName() 源代码等价于 var bar = new (new Foo().getName)(); console.log(bar) 先new Foo得到的实例对象上的getName方法, 再将这个原型上getName方法当做构造函数继续new , 所以执行原型上的方法,打印3 参照:js的运算符优先级 优先级:new(带参数列表)> 函数调用 > new(无参数列表) 原题目 function Foo() { getName = function