1.阐述响应式原理

当一个vue实例创建的时候,vue会遍历data选项的属性,用Object.defineProperty将它们转为getter/setter并在内部追踪相关的依赖,在属性被访问和修改时通知变化。

2.如果data选项的属性值是一个数组,Vue时怎么拦截的?

复制一个原生数组,然后用Object.defineProperty拦截该复制数组的每个方法,最后返回这个当前data属性数组的__proto__等于该复制数组,达到监听数组变化的能力。

vue面试题解答

3.这个内部追踪指的是什么?

内部追踪依赖于Proxy(作用域代理)和渲染函数(做依赖的收集)

4.渲染函数的核心

词法分析、句法分析

5.为什么js禁止用with,vue2.0版本渲染函数还用with?

with的使用主要是因为它消除了对嵌入模板中的JavaScript表达式进行解析和范围分析的需要,从而大大减少了代码原本身的大小和复杂性。由于模板编译器包含在浏览器中运行的独立构建中,负载大小仍然是一个重要的关注点。

完整答案 : https://github.com/vuejs/vue/issues/4115#issuecomment-258525758

 

——————————————  相关问题——————————————

1.Object.defineProperty和proxy的区别

Object.defineProperty(obj, key, descriptor) 

只能监听对象的属性,无法监听数组的变化,属性值也是对象需要深度遍历

descriptor配置项包含  get, set, configurable, enumerable, value

Proxy 

返回一个新的对象,可通过操作返回的新的对象达到目的

有13种拦截方法:

get, set, has, contruct, deleteProperty, defineproperty, enumerate, getOwnPropertyDescriptor,

getPrototypeof, isExtensible, ownKeys, preventExtensions, setPrototypeOf

 

defineProperty再修改原来的obj对象可以触发拦截;

proxy就必须修改代理对象,即Proxy的实例才可以触发拦截;

2. vue和react的区别

(1)数据是否可变

                react推崇函数式思想,数据不可变,单向数据流;vue推崇响应式思想,数据可变, 支持双向绑定。

(2)语法

               react是JSX语法,all in javascript,通过js生成html,css等;vue把html,css,js组合到一起,提供模板引擎来处理html。

(3)组件写法

               react是类式写法,api少,可以通过高阶组件来扩展;vue是声明式写法,api和参数都很多,需要通过mixins来扩展。

(4)框架类别

              react是一个UI组件库,很多事情交给社区去做,例如redux, mobx,vue是渐进式框架,很多东西都是内置的;

              redux的combineReducer就对应vuex的modules,vuex的mutation是直接改变的原始数据,而redux的reducer是返回一个全新的state,所以redux结合immutable来优化性能,vue不需要。

            

相关文章:

  • 2021-09-13
  • 2021-07-17
  • 2022-12-23
  • 2022-12-23
  • 2021-08-07
  • 2022-02-08
  • 2021-10-29
猜你喜欢
  • 2022-12-23
  • 2021-10-25
  • 2022-01-01
  • 2021-12-06
  • 2021-11-10
  • 2021-10-03
  • 2022-02-14
相关资源
相似解决方案