持续更新前端面试题复习2

160 阅读3分钟

MVC 和 MVVM 区别

1.MVC 即 Model-View- Controller 的简写;即模型-视图-控制器。Controller(控制器)负责将 Model 的数据用 View 显示出来,换句话说就是在 Controller 里面把 Model 的数据赋值给 View,也就是单向通信.

2.MVVM 即 Model-View-ViewModel 的简写;即模型-视图-视图模型。ViewModel 层实现数据的双向绑定 一是将【模型】转化成【视图】,即将后端传递的数据转化成所看到的页面。实现的方式是:数据绑定。二是将【视图】转化成【模型】,即将所看到的页面转化成后端的数据。实现的方式是:DOM 事件监听。

MVC 和 MVVM 区别是: 它实现了 View 和 Model 的自动同步,也就是当 Model 的属性改变时,我们不用再自己手动操作 Dom 元素,来改变 View 的显示,而是改变属性后该属性对应 View 层显示会自动改变(对应Vue数据驱动的思想)

组件中的data为什么是一个函数?

一个组件被复用多次的话,就会创建多个实例。本质上,这些实例用的都是同一个构造函数。如果data是对象的话,对象属于引用类型,,改变 其中一个会影响到其他的实例。所以为了保证组件不同的实例之间data不冲突,data必须是一个函数。

Object.defineProperty 和 Proxy 的区别

Object.defineProperty是vue2响应式的原理, Proxy 是vue3响应式的原理

1、Proxy代理整个对象,Object.defineProperty定义对象上的某个属性。 因此对象上定义新属性时,Proxy可以监听到,Object.defineProperty监听不到。

2、Proxy可以监听到数组变更,Object.defineProperty监听不到。

请说下封装 Vue 组件的过程?

首先封装组件是为了提升整个项目的开发效率,能够把页面抽象成多个相对独立的模块,解决了我们传统项项目开发:效率低,难维护,复用性等问题。

Vue组件封装过程

● 首先,使用Vue.extend()创建一个组件

● 然后,使用Vue.component()方法注册组件

● 接着,如果子组件需要数据,父组件:属性绑定传值,可以在props中接受定义.

● 最后,子组件修改好数据之后,想把数据传递给父组件,可以使用emit()方法,父组件@自定义事件名接收

Vue 组件如何进行传值的?

  1. 父组件向子组件传递数据,使用props属性;子组件向父组件中传递数据,在子组件中使用$emit派发事件,父组件中使用v-on 监听事件;
    缺点:组件嵌套层次多的话,传递数据比较麻烦。
  2. 祖先组件通过依赖注入(inject / provide)的方式,向其所有子孙后代传递数据;
    缺点:无法监听数据修改的来源,不支持响应式。
  3. 通过属性$root / $parent / $children / ref,访问根组件、父级组件、子组件中的数据;
    缺点:要求组件之间要有传递性。
  4. 通过事件总线(event Bus)的方式,可以实现任意两个组件间进行数据传递;
    缺点:不支持响应式,这个概念是vue1.0版本中的,现在已经废弃。
  5. 通过 VueJs 的状态管理模式 Vuex,实现多个组件进行数据共享,推荐使用这种方式进行项目中各组件间的数据传递。