js中的经典题Foo.getName

  • Foo.getName所涉及到的知识点
    • 先看看题目代码:

Foo.getName所涉及到的知识点

先看看题目代码:

function Foo() { getName = function () { alert(1); } return this; } Foo.getName = function () { alert(2); } Foo.prototype.getName = function () { alert(3); } var getName = function () { alert(4); } function getName() { alert(5); } Foo.getName(); //2 getName(); //4 Foo().getName(); //1 getName(); //1 new Foo.getName(); //2 new Foo().getName() //3 new new Foo().getName() //3
所涉及到知识点很多,this全局指向,变量表达式与变量声明提升优先、原型链,new运算符优先级等。。

1、先看懂代码:

//创建了foo()方法,里面有全局变量并赋值为一个方法,
//return this,目前this指向全局
function Foo() {getName = function () {alert(1);}return this;
}
//写一个Foo的静态方法,
Foo.getName = function () {alert(2);
}
//给Foo的原型创建一个getName方法,当创建一个Foo实例时,
//如果Foo没有定义getName方法就会去原型对象中找
Foo.prototype.getName = function () {alert(3);
}
//创建一个变量,赋值一个函数,
//相当于var getName,getName=function(){...}
var getName = function () {alert(4);
}
//创建一个全局方法,命名为getName()方法
function getName() {alert(5);
}

2、上面的注释说了代码是干嘛的了,现在看看运行的代码:
(1)Foo.getName(); Foo中的静态方法 //2
(2)getName();调用全局中的getName(),全局getName()提升的比var getName高,而var getName 与全局getName()方法重名,则会覆盖掉全局的getName()方法,所以后面调用的是var getName //4
(3)Foo().getName();运行的是Foo(),Foo()中有个全局变量,又是个getName(),运行Foo会覆盖之前全局的getName(),而Foo()中return this,指向了全局。//1
(4)getName();此刻的全局方法是Foo()中的getName(),//1
(5)此刻就是运算符优先级的问题了。大家可以看下new .()\优先级问题
优先级(高>低):()> new … ( … )>.>new …
看new Foo.getName(),new是没有带参数,那么先执行Foo.getName(),静态方法 //2,之后再创建Foo实例,此刻的new Foo.getName跟Foo.getName没什么区别。
(6)new Foo().getName() ,会先创建一个Foo()实例,再调用Foo()中的getName()方法,Foo()中没有去原型中找。 //3
(7)new new Foo().getName() 与new Foo.getName()相似。多一个new跟之前的没什么区别。 //3

js中的经典题Foo.getName相关推荐

  1. JS经典面试题04-原型链Foo.getName

    1.1-答案揭晓 1.2-原理解析 <!DOCTYPE html> <html lang="en"><head><meta charset ...

  2. 【JS中循环嵌套常见的六大经典例题+六大图形题,你知道哪几个?】

    首先,了解一下循环嵌套的特点:外层循环转一次,内层循环转一圈. 在上一篇随笔中详细介绍了JS中的分支结构和循环结构,我们来简单的回顾一下For循环结构: 1.for循环有三个表达式,分别为: ①定义循 ...

  3. new Foo().getName()经典面试题

    一道经典的面试题,下面用a b c d 标注方便讲解 <!DOCTYPE html> <html lang="en"> <head><me ...

  4. js面试题Foo.getName()的故事

    首先声明下:此题是本人面试时笔试题中的一道,回来一搜居然雷同,纯属偶然,特写此篇来整理一下思绪... 原题: function Foo() {getName = function () { conso ...

  5. 开篇第一题:经典中的经典!

    开篇第一题:经典中的经典!                          --评<编程之美> 原贴地址:http://www.douban.com/review/2130819/ 应该 ...

  6. 后处理程序文件大小的变量_【每日一题】(17题)面试官问:JS中事件流,事件处理程序,事件对象的理解?...

    关注「松宝写代码」,精选好文,每日一题 作者:saucxs | songEagle 2020,实「鼠」不易 2021,「牛」转乾坤 风劲潮涌当扬帆,任重道远须奋蹄! 一.前言 2020.12.23 立 ...

  7. js自动触发onclick_每日一题JS中最基本的this情况分析

    关注"前端学苑" ,坚持每天进步一点点 「~this情况分析 ~」 每日一题,希望让爱学习.思考的前端技术伙伴在一起学习.复盘.成长. 基础知识要夯实,原理源码要深入,深度广度要扩 ...

  8. 前端百题斩【006】——js中三类字符串转数字的方式

    写该系列文章的初衷是"让每位前端工程师掌握高频知识点,为工作助力".这是前端百题斩的第6斩,希望朋友们关注公众号"执鸢者",用知识武装自己的头脑. js中字符串 ...

  9. vue.js中经典扫雷游戏的实现

    可视化 (vue-defuse) An implementation of the classical minesweeper game in vue.js. vue.js中经典扫雷游戏的实现. Vi ...

最新文章

  1. Java学习-jsp内置对象Session
  2. 团队实践,我们是怎么用敏捷开发工具Leangoo的
  3. JavaWeb学习总结(十三)——使用Session防止表单重复提交
  4. 中国电声市场销售分析与投资竞争力研究报告2022版
  5. Python69个内置函数分类总结
  6. c++ primer 5th ,习题11.23自己编写答案
  7. [译]如何在visual studio中调试Javascript
  8. 如果删除github上项目的文件
  9. VMware 发布的版本 Build 与个版本对应关系
  10. Cover团队在Kovan以太坊测试网部署xCOVER智能合约
  11. Hello 博客园! ---致我人生中的第一篇随笔
  12. 360顽固木马专杀工具 千万别用 会删除Oracle服务
  13. springboot中对各个层的理解以及流程
  14. APS系统到底是什么?为什么许多企业纷纷选择APS系统?
  15. 鬼吹灯java攻略_密室逃脱鬼吹灯攻略完美过关图文详解
  16. 樊登读书会用事实说话读后感_樊登读书《用事实说话》读书笔记
  17. Vue-GoogleMap (一)实时定位
  18. 华住有效承接环球影城开业客流;Collinson科领盛任命戴旻Colin Dai为中国区总经理 | 全球旅报...
  19. 职场中如何与老板谈加薪
  20. 指数式增长(Exponential Growth)

热门文章

  1. 分组卷积与DW卷积、Residuals与Inverted Residuals、bottleneck与linearbottleneck
  2. CUDA编程学习笔记 之 页锁定内存(固定内存Pinned Memory)
  3. Python学习笔记-北京图灵学院-Python概述-20200525
  4. 【2018年12月05日】滚动市盈率PE最低排名
  5. 卡方分布、卡方独立性检验和拟合性检验理论及其python实现
  6. linux安装软件之./configure、make、make install 命令含义
  7. 利用 EXE4j 生成 .exe Java Swing程序
  8. 微信小程序中层叠轮播图(仿微信朋友圈swiper样式)
  9. java--集合(1)--黑马程序员
  10. 天下所有的事,都是为了利益,都是按利益逻辑规律在运行,发生的一切事情都可以用利益逻辑来解释