期权合并

当 mixin 和组件本身包含重叠选项时,它们将使用适当的策略合并。例如,具有相同名称的钩子函数将合并到一个数组中,以便调用所有这些函数。另外,mixin 钩子将在组件自己的钩子之前被调用 :

var mixin = {
  created: function () {
    console.log('mixin hook called')
  }
}

new Vue({
  mixins: [mixin],
  created: function () {
    console.log('component hook called')
  }
})

// -> "mixin hook called"
// -> "component hook called"

期望对象值的选项(例如 methodscomponentsdirectives)将合并到同一对象中。当这些对象中存在冲突的键时,组件的选项将优先:

var mixin = {
  methods: {
    foo: function () {
      console.log('foo')
    },
    conflicting: function () {
      console.log('from mixin')
    }
  }
}

var vm = new Vue({
  mixins: [mixin],
  methods: {
    bar: function () {
      console.log('bar')
    },
    conflicting: function () {
      console.log('from self')
    }
  }
})

vm.foo() // -> "foo"
vm.bar() // -> "bar"
vm.conflicting() // -> "from self"

请注意,Vue.extend() 中使用了相同的合并策略。