当前位置: 首页 > news >正文

JavaScript高阶面试题:(第一天)

目录

1.什么是原型,什么是原型链?

2.call / apply / bind 有啥区别

3.JS四种检测数据类型的方式

4.说说继承

5.for..in和for..of和forEach的区别


1.什么是原型,什么是原型链?

原型: 每一个构造函数,都会有一个 prototype 属性。该属性指向一个对象,该对象称之为 原型对象,即原型。

原型链: 当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__上查找,即它的构造函数的prototype,如果还没有找到就会再在构造函数的prototype的__proto__中查找(即上一层构造函数的prototype),这样一层一层向上查找直到Object的prototype结束,这样就会形成一个链式结构,我们称为原型链。我们可以说:它们是继承关系

2.call / apply / bind 有啥区别

call: call(thisObj, arg1, arg2...)

要求传入函数的参数是参数列表

apply: apply(thisObj, [argArray])

要求传入函数的参数必须放入数组中整体传入

bind: bind(thisObj,arg1,arg2,...)

  • 共同点 : 都可以改变this指向
  • 不同点:
    • call 和 apply会立即调用函数.bind不会立即调用函数, 需要手动调用.
    • call及bind 和 apply传递的参数不一样,call及bind传递参数使用逗号隔开,apply使用数组传递.
  • 应用场景
    1. call 经常做继承.
    2. apply 经常跟数组有关系.  比如借助于数学对象实现数组最大值最小值
    3. bind  不调用函数,但是还想改变this指向. 比如改变定时器内部的this指向.

3.JS四种检测数据类型的方式

1.typeOf :只能检测基本数据类型
2.instanceOf :检测当前实例是否属于某个类的方法
3.constructor: 检测当前实例的构造函数
4.Object.prototype.toString.call( ) : 最准确的方式;

4.说说继承

  1. 构造函数继承(在子类的构造函数中执行父类的构造函数,并为其绑定子类的this,让父类的构造函数把成员属性和方法都挂到子类的this上)
    缺点:无法访问原型上的方法
  2. 原型链继承(将子构造函数的原型对象指向父构造函数的实例,让constructor 重新指向子构造函数)
    缺点:无法为不同的实例初始化继承来的属性
  3. 组合式继承(将原型链继承和构造函数继承组合到一起, 综合了原型链继承和构造函数继承的优点)
    缺点:调用了两次父类构造函数
  4. 原型式继承(Object.create():这个方法接收两个参数:一是用作新对象原型的对象、二是为新对象定义额外属性的对象(可选参数),核心思想:使用一个中间函数,连接父类与子类的关系。借助原型可以基于已有的对象创建新对象,同时还不必因此创建自定义类型。)
  5. extends继承(class和extends是es6新增的,class创建一个类,extends实现继承)

可参照文档:JS中常用实现继承的方法(Object.create的原理)_object.create原理-CSDN博客

5.for..in和for..of和forEach的区别

for ..in:

可以循环数组也能循环对象,循环遍历的值是数据结构的键值;

可以使用return、break、continue中断循环;

在有些情况下会以随机顺序遍历数组,所以最好用来遍历对象;

for ..of:

可以循环可迭代对象(如数组、字符串等),循环遍历的值是数据结构的值;

可以使用return、break、continue中断循环;

forEach:

在回调函数内部有三个参数:item、index、arr分别表示当前项、当前项的索引下标、数组本身;

会对数组的每一个元素执行一次提供的函数,不改变原数组、没有返回值(undefined);


http://www.mrgr.cn/news/24276.html

相关文章:

  • maven中的仓库的配置与优先级
  • 水平垂直居中的几种方法(总结)
  • 基于Spring Boot的电子请柬私人定制销售平台的设计与实现---附源码78900
  • 史级低价1元《魔域口袋版》神话斗神·黑悟空 带领战队傲视群雄
  • 住宅建筑电气火灾预防
  • electron有关mac构建
  • 【C语言进阶】C语言动态内存管理:深入理解malloc、calloc与realloc
  • 中国企业500强!最新名单揭晓→
  • 基于SpringBoot+Vue的考务管理系统
  • 【TCP】相关机制:异常处理
  • 多线程获取留言板
  • css总结(记录一下...)
  • Pycharm 输入三个引号没有自动生成函数(方法)注释
  • 小白也能懂的ComfyUI使用教程和问题解决【AIStarter】
  • 【C++】创建静态数组,动态数组,vector数组
  • yarn install error Error: certificate has expired SSL证书过期
  • 汽车以太网100BASE-T1 和 1000BASE-T1特性
  • uniapp小程序,使用腾讯地图获取定位
  • PPT幻灯片的添加与编辑:全面技术指南
  • 【React源码解析】深入理解react时间切片和fiber架构