搜了下经典的Foo和getName的题目,看了几个解释,懒得看,自己解一下,作为笔记。

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的静态方法
Foo.getName();// //function getName有提前声明的规则,声明后被var getName= 。。覆盖,则getName为4
getName();// //Foo()的return this为window,window.getName 在Foo里面被覆盖,则输出1
Foo().getName();// //同上,因调用了Foo();window的getName被覆盖
getName();// //依然只是调用了Foo对象上的getName,又因为Foo.getNname,所以相当于
/**
* function a(){console.log(2)};
* new a();
* **/
new Foo.getName();// //先执行了new Foo();返回一个对象,这个对象的getName为prototype上的getName,相当于(new Foo()).getName();
new Foo().getName();// //
new new Foo().getName();//

对于后三题,尤其是最后一个new new Foo().getName(),特别容易懵x

对于带new的输出,用一个this来跟踪。

function Foo(){
this.a = 1;
getName = function(){
this.a = 11;
console.log(1);
};
return this;
} Foo.getName = function(){
this.a = 2;
console.log(2);
} Foo.prototype.getName = function(){
console.log(3);
this.a = 3;
  return "i'm prototype's getName";
} var getName = function(){
console.log(4);
this.a = 4;
} function getName(){
console.log(5);
this.a = 5;
}
//相当于 new (Foo.getName())
var a1 = new Foo.getName();//
console.log(a1.a);//2; //相当于 (new Foo()).getName(); 只是执行了一个prototype里getName()的方法,
//这个方法若无返回则a2为undefined,
//可以进一步确定,在prototype.getName中添加return ,则a2会等于return出来的结果
var a2 = new Foo().getName();//3
console.log(a2.a);//报错:cannot read property a of undefinded;
//这题输出的结果为3;从结果上看,相当于  new Foo.prototype.getName()
//也就是说new Foo().getName() == Foo.prototype.getName()
//所以执行的结果应该相当于 new ((new Foo()).getName())
//这句话用通俗点说法就是,new了一个Foo对象A,然后以A原型里的getName()方法作为构造函数new了B,最后这个B.a = 3;
//当然在new的时候执行构造器,就输出了3;

var a3 = new new Foo().getName();//3
console.log(a3.a);//3

经典的Foo和getName的更多相关文章

  1. JS Foo.getName笔试题解析,杂谈静态属性与实例属性,变量提升,this指向,new一个函数的过程

     壹 ❀ 引 Foo.getName算是一道比较老的面试题了,大致百度了一下在17年就有相关文章在介绍它,遗憾的是我在19年才遇到,比较奇妙的是现在仍有公司会使用这道题.相关解析网上是有的,这里我站在 ...

  2. 【编码题篇】收集整理来自网络上的一些常见的 经典前端、H5面试题 Web前端开发面试题

    编写一个方法 求一个字符串的字节长度假设:一个英文字符占用一个字节,一个中文字符占用两个字节 function GetBytes(str){ var len = str.length; var byt ...

  3. 一道经典的js面试题

    # 声明:学习编程语言最好的方式就是通过实例学习 ## 下面是我在博客上看到的一道js面试题,可以说非常经典,下面会以最简单的方式让你理解题目:```bashfunction Foo() { getN ...

  4. 关于foo的一个面试题

    今天看到一个关于foo的一个面试题,赶脚特别有意思 function foo(){// 第16行 getName = function(){console.log(1)} return this } ...

  5. js高频经典面试题总结

    类型转换问题 console.log(null>=0); console.log(null<=0); console.log(null==0); console.log(undefined ...

  6. js 中对于this 的理解的 经典案例

    function Foo(){ getName = function(){console.log(1);}; return this; }Foo.getName = function(){consol ...

  7. JS核心系列:理解 new 的运行机制

    和其他高级语言一样 javascript 中也有 new 运算符,我们知道 new 运算符是用来实例化一个类,从而在内存中分配一个实例对象. 但在 javascript 中,万物皆对象,为什么还要通过 ...

  8. 前端试题本(Javascript篇)

    JS1. 下面这个JS程序的输出是什么:JS2.下面的JS程序输出是什么:JS3.页面有一个按钮button id为 button1,通过原生的js如何禁用?JS4.页面有一个按钮button id为 ...

  9. JavaScript 函数的两种声明方式

    1.函数声明的方式 JavaScript声明函数有两种选择:函数声明法,表达式定义法. 函数声明法 function sum (num1 ,num2){ return num1+num2 } 表达式定 ...

随机推荐

  1. word之个人设置

    1.视图设置.五种视图中一般都是用“页面视图”.标尺和导航窗口都需要显示出来,方便操作,显示比例就用最真实的100%比例. 2.设置文件自动保存时间间隔和位置 3.word段落设置,不允许西文单词中间 ...

  2. linux下视频转gif

    title: linux下视频转gif date: 2017-11-23 16:55:26 tags: linux categories: linux 安装ffmpeg ffmpeg是一套非常强大的音 ...

  3. Rdlc 参数问题

    需要sql中的参数自动在生成报表的时候生成的方法: 例如有这样的sql需要自动生成:BeginTime 和 EndTime 两个参数: DECLARE @BeginTime DATETIME='201 ...

  4. 第三方jar上传至公司maven仓库(私库)解决办法

    在实际开发过程中,我们经常会遇到需要引用的jar依赖,在我们公司的maven仓库不存在,这个时候我们就需要把jar上传上去,在项目中添加对应依赖就OK了. 步骤1:下载jar 在http://mvnr ...

  5. Qml文件的两种加载方式

    一种是QQmlApplicationEngine搭配Window,例如: #include <QGuiApplication> #include <QQmlApplicationEn ...

  6. 因微信SSJD分享接口升级,分享变化

    4月25日发版发现的微信分享问题,已确认是腾讯微信开发团队更新的分享的策略,而我们未能收到通知依然沿用老代码造成的.目前已经解决,解决方案如下: 微信分享的shareUrl域名必须与当前环境的安全域名 ...

  7. Appium+python自动化1-环境搭建(上)

    前言 appium可以说是做app最火的一个自动化框架,它的主要优势是支持android和ios,另外脚本语言也是支持java和Python.小编擅长Python,所以接下来的教程是appium+py ...

  8. P2P原理(转)

    P2P(Peer to Peer)对等网络 P2P技术属于覆盖层网络(Overlay Network)的范畴,是相对于客户机/服务器(C/S)模式来说的一种网络信息交换方式.在C/S模式中,数据的分发 ...

  9. Linux学习笔记之时间同步the NTP socket is in use, exiting问题

    [root@app1 ~]# ntpdate ntp.api.bz 17 Apr 14:39:09 ntpdate[24744]: the NTP socket is in use, exiting ...

  10. 配置firewalld防火墙

    题:请按下列要求在 system1 和 system2 上设定防火墙系统: 允许 group8.example.com 域的客户对 system1 和 system2 进行 ssh 访问. 禁止 my ...