前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >new new Foo().getName()解析

new new Foo().getName()解析

作者头像
用户9914333
发布2022-07-21 19:53:46
1.1K0
发布2022-07-21 19:53:46
举报
文章被收录于专栏:bug收集bug收集

bug收集:专门解决与收集bug的网站

网址:www.bugshouji.com

01

面试题

看到一道非常经典的面试题,其中最大的亮点就是关于new new Foo().getNam() 的输出结果,话不多说,下面就来看看这道题

代码语言:javascript
复制
function Foo(){
  getName=function(){alert(1);}
  return this;
}

Foo.getName=function(){alert(2);}

// Foo.prototype.getName=function(){
//  alert(3);
//  }
Foo.prototype.getName=function(){
  alert(3);   
  this.show=function(){ 
    console.log('in')
  }
}

var getName=function(){alert(4);}

function getName(){alert(5);}

//请写出下面方法的输出结果
Foo.getName();  
getName();  
Foo().getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();  
var obj = new new Foo().getName();

大家,可以先自己思考下答案,再看下面的答案与解析

02

结果解析

代码语言:javascript
复制
Foo.getName(); //2

相当于调用名叫Foo.getName的一个函数,所以输出2

代码语言:javascript
复制
getName();     //4

就相当于调用getName函数,所以输出4

代码语言:javascript
复制
Foo().getName();  //1 ,

先调用Foo()函数,它将返回this,this 这里指window,在Foo里有一个变量getName,因没有var,算是全局变量

所以,执行完Foo后,window.getName,调用的就是Foo中的getName中,它把最外面的getName重写了.所以执行getName(); 输出结果1

代码语言:javascript
复制
new Foo.getName(); // 2

这里Foo后面没有括号,所以Foo.getName会看成一个函数的名称

代码语言:javascript
复制
new Foo().getName();  //3

先执行new Foo() , 会产生一个实例化对象,然后在执行getName,即prototype添加的getName

代码语言:javascript
复制
new new Foo().getName();   //3

先执行new Foo(), 再执行getName() , 然后在执行第一个new 这个new 将,实例化Foo中prototype 中的getName

为证明上面的说法 ,我将如下代码进行了修改:

代码语言:javascript
复制
Foo.prototype.getName=function(){
  alert(3);
  this.show=function(){
   console.log('in')
  }
}

然后执行,下面的代码:

代码语言:javascript
复制
var obj = new new Foo().getName();
obj.show();

通过,上面的代码,发现in 可以打印, 说明new new, 其它先执行后面的new, 即new Foo().getName(), 在执行第一个new ,第一个new其实new的是Foo实例对象中的getName方法

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 bug收集 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档