SilentDepth
2018-04-23 21:03:30 +08:00
Vue 是怎么用的相信你是知道的。我们把 new Vue({}) 生成的东西称为「赤果果的实例」,就是 options 里啥都没有,单纯一个空对象。
那么,new Vue({ /* something */ }) 就可以叫「有内容的实例」,options 对象里有内容了。
Vue.extend({ /* something */ }) 返回一个「有内容的类」,假定赋值给一个 VueWithSomething,然后你就可以这么用:new VueWithSomething()。你猜它返回什么?「有内容的实例」,因为这个构造器本身带着「内容」,即使 new 的时候没有传 options 那它也是有内容的,天生骄傲。
require('./message.vue') 返回什么?在 loader 配置正确的情况下,*.vue 文件会被 vue-loader 转换成一个 options 对象(不难想象,是吧)。那么 Vue.extend(require('./message.vue')) 就变成了什么呢?
Vue.extend({ /* options-from-message */ }),一个「有内容的类」,而这个「内容」来自 message.vue 。
import 跟 Vue.extend() 没关系,跟 require 有关系,但超出这个主题的讨论范围了。
extends 是啥? TypeScript 的 extends ?那相当于语言语法层面的 Vue.extend()。