Vue.extends(options)
使用基础 Vue 构造器,创建一个“子类”。参数是一个包含组件选项的对象
data 选项是特例,需要注意 - 在 Vue.extend() 中它必须是函数
<div id="mount-point"></div>
// 创建构造器
var Profile = Vue.extend({
template: '<p>{{firstName}} {{lastName}} aka {{alias}}</p>',
data: function () {
return {
firstName: 'Walter',
lastName: 'White',
alias: 'Heisenberg'
}
}
})
// 创建 Profile 实例,并挂载到一个元素上。
new Profile().$mount(’#mount-point’)
这里的data为什么是函数?
- 如果data是一个函数的话,这样每复用一次组件,就会返回一份新的data(类似于给每个组件实例创建一个私有的数据空间,让各个组件实例维护各自的数据)
- Object是引用数据类型,里面保存的是内存地址,单纯的写成对象形式,就使得所有组件实例共用了一份data,就会造成一个变了全都会变的结果。
总结:
- 根实例对象data可以是对象也可以是函数(根实例是单例),
不会产生数据污染情况
- 组件实例对象data必须为函数,目的是为了
防止多个组件实例对象之间共用一个data,产生数据污染。
- 采用
函数的形式
,initData时会将其作为工厂函数都会返回全新data对象