title: vue经典面试题之各options的优先级

简介: vue经典面试题之各options的优先级

结论:props > methods > data > computed > watch

1、查看源码 src\core\instance\state.js,initState方法

export function initState (vm: Component) {
  vm._watchers = []
  const opts = vm.$options
  if (opts.props) initProps(vm, opts.props)
  if (opts.methods) initMethods(vm, opts.methods)
  if (opts.data) {
    initData(vm)
  } else {
    observe(vm._data = {}, true /* asRootData */)
  }
  if (opts.computed) initComputed(vm, opts.computed)
  if (opts.watch && opts.watch !== nativeWatch) {
    initWatch(vm, opts.watch)
  }
}

结论:

可以看出 props > methods > data > computed > watch


不过在实际开应用中无需注意,我们只需了解即可

可以查看方法 initMethods

function initMethods (vm: Component, methods: Object) {
  const props = vm.$options.props
  for (const key in methods) {
    if (process.env.NODE_ENV !== 'production') {
      if (typeof methods[key] !== 'function') {
        warn(
          `Method "${key}" has type "${typeof methods[key]}" in the component definition. ` +
          `Did you reference the function correctly?`,
          vm
        )
      }
      if (props && hasOwn(props, key)) {
        warn(
          `Method "${key}" has already been defined as a prop.`,
         vm
        )
      }
      if ((key in vm) && isReserved(key)) {
        warn(
          `Method "${key}" conflicts with an existing Vue instance method. ` +
          `Avoid defining component methods that start with _ or $.`
        )
      }
    }
    vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm)
  }
}

可以看到会对props和methods属性进行判重

相关文章
|
3天前
|
JavaScript
vue面试
vue面试
6 1
|
5天前
|
JavaScript 前端开发 API
vue面试题目汇总
vue面试题目汇总
40 4
|
5天前
|
缓存 JavaScript 前端开发
Vue常见面试题 标准答案汇总一
Vue常见面试题 标准答案汇总一
68 1
|
5天前
|
监控 JavaScript 前端开发
vue基础面试题10问
vue基础面试题10问
43 0
|
5天前
|
人工智能 缓存 JavaScript
【利用AI刷面试题】AI:十道Vue面试题巩固一下知识
【利用AI刷面试题】AI:十道Vue面试题巩固一下知识
|
5天前
|
存储 JavaScript 安全
Vue基础面试题题目一
Vue基础面试题题目一
31 0
|
5天前
|
JavaScript 数据安全/隐私保护 开发者
常见的vue面试中的proxy和object.defineProperty的区别
常见的vue面试中的proxy和object.defineProperty的区别
|
5天前
|
存储 JavaScript
面试题:扩展运算符(...)的优缺点(vue)
面试题:扩展运算符(...)的优缺点(vue)
44 0
|
5天前
|
缓存 JavaScript 前端开发
vue核心面试题汇总【查缺补漏】(二)
vue核心面试题汇总【查缺补漏】(二)
|
5天前
|
缓存 移动开发 JavaScript
vue核心面试题汇总【查缺补漏】(一)
vue核心面试题汇总【查缺补漏】(一)
108 0