1.什么是事件委托?为什么这样做?
答:它还有一个名字叫事件代理,事件委托就是利用事件冒泡,将自身要执行的事件委托给父级元素执行。
为什么这样做?通过事件委托可以减少事件处理程序数量,能减少与dom的交互次数,提高性能;
2.js数据类型?
答:JS的数据类型有8种。
在ES5的时候,我们认知的数据类型确实是 6种:Number、String、Boolean、undefined、object、Null。
ES6 中新增了一种 Symbol 。这种类型的对象永不相等,即始创建的时候传入相同的值,可以解决属性名冲突的问题,做为标记。
谷歌67版本中还出现了一种 bigInt。是指安全存储、操作大整数。(但是很多人不把这个做为一个类型)。
JS数据类型:Object 中包含了哪几种类型?其中包含了Date、function、Array等(这三种比较常用)
3.如果Promise没有all方法的话,你怎么实现all。
4.数组去重除了set外,还可以怎么做?
答:
1.filter()和indexOf()实现去重
2.reduce()和includes()实现去重
3.双重for循环 + splice() 或 双重for循环 + push() (ES5的方法)
5.Axios的原理,基于什么实现的。
答:Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
axios还是属于 XMLHttpRequest, 因此需要实现一个ajax;还需要一个promise对象来对结果进行处理。
6.Axios二次分装的目的?
答:二次封装axios,方便我们后续项目的使用。
api统一管理,不管接口有多少,所有的接口都可以非常清晰,容易维护.通常我们的项目会越做越大,页面也会越来越多,如果页面非常的少,直接用axios也没有什么大的影响,那页面组件多了起来,上百个接口呢,这个时候后端改了接口,多加了一个参数什么的呢?那就只有找到那个页面,进去修改.整个过程很繁琐不易于项目的维护和迭代.
7.说说constructor()?
答: constructor的作用是可以知道实例对象的构造函数是谁,constructor属性表示原型对象与构造函数之间的关联关系,如果修改了原型对象,一般会同时修改constructor属性,防止引用的时候出错。
8.class与function定义类的区别?
答:
1.关于构造器constructor:在function定义的构造函数中,其prototype.constructor属性指向构造器自身,在class定义的类中,constructor其实也相当于定义在prototype属性上
2.重复定义:function会覆盖之前定义的方法;class会报错
3.原型或者类中方法的枚举:class中所有方法不可枚举
4.class没有变量提升,function有
5.class定义的类没有私有方法和私有属性
9.自己实现发布订阅者模式 如何实现?
答:
1. 创建一个对象
2. 在该对象上创建一个缓存列表(调度中心)
3. on 方法用来把函数 fn 都加到缓存列表中(订阅者注册事件到调度中心)
4. emit 方法取到 arguments 里第一个当做 event,根据 event 值去执行对应缓存列表中的函数(发布者发布事件到调度中心,调度中心处理代码)
5. off 方法可以根据 event 值取消订阅(取消订阅)
6. once 方法只监听一次,调用完毕后删除缓存函数(订阅一次)
10.如何移除订阅发布者模式
答:实现一个off方法根据event值取消订阅,从订阅列表中移除即可。