函数声明,函数变量,构造函数的调用问题

代码如下

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(); //

现在想问的是new Foo()不是可以省略括号写成 new Foo吗,为什么第5问和第6问结果不一样呢, 还有最后一问直接不明白为啥结果是这样的,谢谢各位大神的不吝赐教

阅读 1.4k
2 个回答

i. 关于第5和第6为什么不一样,在这种情况下,带不带括号是有区别的,具体可以看这个。

https://segmentfault.com/q/10...

i. 最后一问

new Foo().getName();
等同于 const a = new Foo();a.getName();也就是Foo.prototype.getName()

new new Foo().getName();
看作 const A = new Foo().getName; new A();
然后看作const A = Foo.prototype.getName; new A();

另外,运算符优先级

1、第5问和第6问结果不一样呢
优先级不同
new Foo.getName();就类似于new (Foo.getName)()
new Foo().getName();类似于(new Foo()).getName()
2、最后一问这样看就比较好理解了new ((new Foo()).getName)()

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