一、自我介绍,不管哪家公司都会开头让你先自我介绍。
二、面试题分享:
(1)、react组件通信的方式
1、props
2、状态提升
3、context
4、Redux和Mobx
(2)什么是高阶组件:高阶组件就是接收一个组件,然后返回一个新组件
1、属性代理:实质就是通过包裹原来的组件来操作props;
2、反向继承:反向继承是指返回的组件去继承之前的组件;
ps:反向继承有一个重要的点: 反向继承不能保证完整的子组件树被解析。
(3)高阶组件和类组件的区别(找不到答案,求大神解释)
(4)事件模型
事件模型就是观察者模式,多个观察者对象同时监听某一个主题对象,这个主题对象的状态变化时会通知所有的订阅者,使得它们能够做出反应。这就是观察者模式。
JS的事件模型就是一种观察者模式的体现,当对应的事件被触发时,监听该事件的所有监听函数都会被调用。
事件流有两种:
事件冒泡: 是一种从下往上的传播方式。事件最开始由DOM最低层的子节点, 然后逐渐向上传播到DOM中最高层的父节点。
事件捕获: 与事件冒泡相反。是一种从上往下的传播方式。事件最开始由DOM最高层的父节点, 然后逐渐向上传播到DOM中最低层的子节点。
事件模型
DOM0级模型
又称为原始事件模型,在该模型中,事件不会传播,即没有事件流的概念。事件绑定监听函数比较简单, 有两种方式:
HTML代码中直接绑定:
通过JS代码指定属性值:
IE事件模型
IE事件模型共有两个过程:
处理阶段:事件到达目标元素, 触发目标元素的监听函数。
冒泡阶段:事件从目标元素冒泡到document, 依次检查经过的节点是否绑定了事件监听函数,如果有则执行。
DOM2级模型
属于W3C标准模型,现代浏览器(除IE6-8之外的浏览器)都支持该模型。在该事件模型中,一次事件共有三个过程:
捕获阶段:事件从document一直向下传播到目标元素, 依次检查经过的节点是否绑定了事件监听函数,如果有则执行。
处理阶段:事件到达目标元素, 触发目标元素的监听函数。
冒泡阶段:事件从目标元素冒泡到document, 依次检查经过的节点是否绑定了事件监听函数,如果有则执行。
事件对象
当一个事件被触发时,会创建一个事件对象(Event Object), 这个对象里面包含了与该事件相关的属性或者方法。该对象会作为第一个参数传递给监听函数。
-
DOM事件模型中的事件对象常用属性:
-
type用于获取事件类型
-
target获取事件目标
-
stopPropagation()阻止事件冒泡
-
preventDefault()阻止事件默认行为
-
-
IE事件模型中的事件对象常用属性:
-
type用于获取事件类型
-
srcElement获取事件目标
-
cancelBubble阻止事件冒泡
-
returnValue阻止事件默认行为
-
事件代理
事件在冒泡过程中会上传到父节点,因此可以把子节点的监听函数定义在父节点上,由父节点的监听函数统一处理多个子元素的事件,这种方式称为事件代理(Event delegation)。
(5)盒子模型
标准盒子模型的范围包括margin、border、padding、content,并且content部分不包含其他部分
IE盒子模型的范围包括margin、border、padding、content,和w3c盒子模型不同的是,IE盒子模型的content部分包含了padding和border.
(6)箭头函数什么时候不可用
1、函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。*
2、不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。*
3、不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
4、不可以使用yield命令,因此箭头函数不能用作 Generator 函数。