经典的Foo和getName
搜了下经典的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的更多相关文章
- JS Foo.getName笔试题解析,杂谈静态属性与实例属性,变量提升,this指向,new一个函数的过程
壹 ❀ 引 Foo.getName算是一道比较老的面试题了,大致百度了一下在17年就有相关文章在介绍它,遗憾的是我在19年才遇到,比较奇妙的是现在仍有公司会使用这道题.相关解析网上是有的,这里我站在 ...
- 【编码题篇】收集整理来自网络上的一些常见的 经典前端、H5面试题 Web前端开发面试题
编写一个方法 求一个字符串的字节长度假设:一个英文字符占用一个字节,一个中文字符占用两个字节 function GetBytes(str){ var len = str.length; var byt ...
- 一道经典的js面试题
# 声明:学习编程语言最好的方式就是通过实例学习 ## 下面是我在博客上看到的一道js面试题,可以说非常经典,下面会以最简单的方式让你理解题目:```bashfunction Foo() { getN ...
- 关于foo的一个面试题
今天看到一个关于foo的一个面试题,赶脚特别有意思 function foo(){// 第16行 getName = function(){console.log(1)} return this } ...
- js高频经典面试题总结
类型转换问题 console.log(null>=0); console.log(null<=0); console.log(null==0); console.log(undefined ...
- js 中对于this 的理解的 经典案例
function Foo(){ getName = function(){console.log(1);}; return this; }Foo.getName = function(){consol ...
- JS核心系列:理解 new 的运行机制
和其他高级语言一样 javascript 中也有 new 运算符,我们知道 new 运算符是用来实例化一个类,从而在内存中分配一个实例对象. 但在 javascript 中,万物皆对象,为什么还要通过 ...
- 前端试题本(Javascript篇)
JS1. 下面这个JS程序的输出是什么:JS2.下面的JS程序输出是什么:JS3.页面有一个按钮button id为 button1,通过原生的js如何禁用?JS4.页面有一个按钮button id为 ...
- JavaScript 函数的两种声明方式
1.函数声明的方式 JavaScript声明函数有两种选择:函数声明法,表达式定义法. 函数声明法 function sum (num1 ,num2){ return num1+num2 } 表达式定 ...
随机推荐
- cookies增删改擦操作
//判断是否存在名为aaa的cookie function hasSetCookie(name){ var strCookie = document.cookie; var arrCookie = s ...
- spring boot 整合freemarker(好用!!!!)
springboot整合freemarker 1.pom依赖 <!-- 引入freeMarker的依赖包. --> <dependency> <groupId>or ...
- SD卡与FAT32系统学习
2011-06-06 23:04 前2天,我了解了一下SD卡驱动的原理及FAT32文件系统的结构.接着准备主要已移植为主.通过LCD显示SD卡中的图片.但我需要分步进行. 0,使sd卡能读写数据.1, ...
- js 取消事件冒泡
html部分 <input type="button" id="btn1" value="按钮" /> <div id=& ...
- JAX-WS 使用maven创建
maven 创建jar jar包依赖 <dependency> <groupId>junit</groupId> <artifactId>junit&l ...
- 常用验证正则:用户名、密码、邮箱、手机号、身份证(PHP和JavaScript)
日常开发中,常常会用到一些简单常用的正则表达式,用于判断一些常见的情况 下边,就列出五种(验证用户名,密码强度,邮箱格式,手机号格式和身份证格式)常见的情况 分成PHP版本和JavaScript两个版 ...
- 手游折扣app排行榜前10名_2018哪个折扣app最低最好
2018游戏圈白皮书发布,PC端游的份额继续下降,页游的比例也在下降,但手游的比例持续3年上升.以渠道为阵营,逐渐小的平台和公会被逐渐淘汰.流量集中在少数几个大的平台.但是这样带来的问题是,平台越来越 ...
- 【Git】vs code+git 不使用ssh的链接remote server的方式
git config --global user.name "dennis wu" git config --global user.email "email" ...
- L2-003. 月饼
L2-003. 月饼 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时 ...
- ubuntun 18.04 安装google浏览器
---恢复内容开始--- 一:下载谷歌浏览器镜像源 sudo wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/ap ...