问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JavaScript:面试频繁出现的几个易错点

发布网友 发布时间:2022-04-24 00:57

我来回答

1个回答

热心网友 时间:2022-04-22 14:00

1.前言
这段时间,金三银四,很多人面试,很多人分享面试题。在前段时间,我也临时担任面试官,为了大概了解面试者的水平,我也写了一份题目,面试了几个前端开发者。在这段时间里面,我在学,在写设计模式的一些知识,想不到的设计模式的这些知识,就是面试题里面,频繁让人掉坑的考点。所以,今天就总结一下,那些让人掉坑的考点。
2.面向对象编程
关于面向对象和面向过程,个人觉得这两者都是绝对独立的,而是相互相成的关系。至于什么时候用面向对象,什么时候用面向过程,具体情况,具体分析。追答针对于面向对象编程的。知乎上有一个高赞回答:
面向对象: 狗.吃(屎)
面向过程: 吃.(狗,屎)
但是这个例子觉得不太优雅,我改一下了,举一个优雅些的小例子说明一下面向对象和面向过程的区别。
需求:定义‘守候吃火锅’
面向对象的思想是:守候.动作(吃火锅)
面向过程的思想是:动作(守候,吃火锅)
代码实现方面:
//面向对象 //定义人(姓名,性别,年龄) let People=function(name){ this.name=name; } //动作 People.prototype={ eat:function(someThing){ console.log(`${this.name}吃${someThing}`); } } //守候是个人,所以要创建一个人(new一次People) let shouhou=new People('守候','男',24); shouhou.eat('火锅'); //面向过程 let eat=function(who,someThing){ console.log(`${who}吃${someThing}`); } eat('守候','火锅');
结果都一样,都是输出‘守候吃火锅’。但是万一我现在吃饱了,准备写代码了。这下怎么实现呢?看代码
//面向对象 shouhou.coding=function(){ console.log(this.name+'写代码'); } shouhou.coding(); //面向过程 let coding=function(who){ console.log(who+'写代码'); } coding('守候');
结果也一样:‘守候写代码’
但是不难发现面向对象更加的灵活,复用性和扩展性更加。因为面向对象就是针对对象(例子中的:‘守候’)来进行执行某些动作。这些动作可以自定义扩展。
而面向过程是定义很多的动作,来指定谁来执行这个动作。
好了,面向对象的简单说明就到这里了,至于面向对象的三大特性:继承,封装,多态这个自行上网查找资料。

3.this
使用 JavaScript 开发的时候,很多开发者多多少少会被 this 的指向搞蒙圈,但是实际上,关于 this 的指向,记住最核心的一句话:哪个对象调用函数,函数里面的this指向哪个对象。
下面分几种情况谈论下
3-1.普通函数调用
这个情况没特殊意外,就是指向全局对象-window。
let username='守候' function fn(){ alert(this.username);//underfind } fu();
可能大家会困惑,为什么不是输出守候,但是在细看一看,我声明的方式是let,不会是window对象
如果输出守候,要这样写
var username='守候' function fn(){ alert(this.username);//守候 } fu(); //--------------- window.username='守候' function fn(){ alert(this.username);//守候 } fu();
3-2.对象函数调用
这个相信不难理解,就是那个函数调用,this指向哪里
window.b=2222 let obj={ a:111, fn:function(){ alert(this.a);//111 alert(this.b);//underfind } } obj.fn();
很明显,第一次就是输出obj.a,就是111。而第二次,obj没有b这个属性,所以输出underfind,因为this指向obj。
但是下面这个情况得注意
let obj1={ a:222 }; let obj2={ a:111, fn:function(){ alert(this.a); } } obj1.fn=obj2.fn; obj1.fn();//222
这个相信也不难理解,虽然obj1.fn是从obj2.fn赋值而来,但是调用函数的是obj1,所以this指向obj1。
3-3.构造函数调用
let TestClass=function(){ this.name='111'; } let subClass=new TestClass(); subClass.name='守候'; console.log(subClass.name);//守候 let subClass1=new TestClass(); console.log(subClass1.name)//111
这个也是不难理解,回忆下(new的四个步骤)就差不多了!
但是有一个坑,虽然一般不会出现,但是有必要提一下。
在构造函数里面返回一个对象,会直接返回这个对象,而不是执行构造函数后创建的对象

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
色彩中蓝色、红色、黄色除了加白色以外还有什么办法提高明度 色彩不敢调亮怎么办? 色彩如何提亮 男朋友惹我生气了 事后一点悔意也没 都在气头上 我不小心打男朋友了 他... 解签:为人处事莫亏心,暗室之中有灵应,一时得意反成失,半点悔改胜似金... 我手机之前一段时间由于欠费停机了 前几天我充了50元进去怎么还是... 撕名牌可以用哪些超能力技能? 为什么5孔插座带开关,安装好之后,灯有电,插座不通电? 怎么把照片内存变小 图片内存变小的方法 百度地图导航如何连接车蓝牙 百度地图导航连接车蓝牙方法 湖南省公安厅换取国籍驾驶证查询电话 javascript面试题级答案 如何查询湖南省地区的机动车驾驶证注销情况? JavaScript面试需要注意什么 我想查我的驾驶证还有多少分要怎么查.湖南邵阳的 关于js原型的面试题讲解 我的驾驶证是湖南省衡阳市的,我想问下有什么网站可以查驾驶证有没有年审 面试的时候 到底怎么说了解javascript 湖南省驾驶证年检怎么查,谁能告诉我呀 湖南驾驶证年审查询 湖南c1驾照扣分怎么查询 网上查驾驶证真伪查询我的驾驶证是湖南怎么可以看到真伪呢? 怎样查询湖南省营业性道路运输驾驶员从业资格证? 湖南的驾照怎么在网上查驾照扣分情况? 湖南省驾驶证查询怎么查 湖南驾驶证学时怎么查 湖南省益阳市支付宝搜什么可以查到摩托车驾驶证 青浦教育局举报老师的电话是多少 青浦区白鹤镇金项村九组拆迁吗 青浦区农村安置房拆迁协议中看出是数砖头还是人头 新拿到的驾驶证为什么在湖南公安平台查不到电子驾驶证的信息? www.hn122122.com湖南交通违法服务平台,这个是*机构还是企业机构? 金凤凰超级理财骗局,谁知道? 湖南省驾驶证邮寄怎么查 程序员面试时,Javascrip和Ajax都会被问一些什么问题 金凤凰接单平台是真是假 js面试题 需要用正则做的? 桐乡市申银万国金凤凰投资管理有限公司怎么样? 福建金凤凰资产管理有限公司怎么样? js的问题,面试别人问了我以下问题,js的执行原理是什么, 金凤凰理财投资可靠吗 面试问js原型怎么理解 金凤凰理财真相揭秘.金凤凰是不是传销.靠不靠谱 由此面试,面试官问我,js能做什么。我知道js是干什么用的,到底js能做... javascript的面试题。谁能帮我解释下,为什么第二题和第四题是那个答案... 金凤凰理财投资安全吗 深圳金凤凰财富管理中心有限公司怎么样? java 面试题用javascript和jquery 写出选择所有input标签 金凤凰超级理财是骗局? java、javascript问题,面试题来的,我不太懂,希望有高手...