vue的data为什么必须是函数?

  我们先看看 官方给出得data的说明:

  

 

 

   

  让我们来看一个例子:

  

new  Vue({
    el: '#app',
    template: `<div>{{name}}</div>`,
    data: {
        demo: '951'
    }
})

  在new vue()中,data可以直接是一个对象,为什么在vue组件中,data必须是一个函数呢?

   让我们再看下面这个原型链:

  

var Component = function() {};
Component.prototype.data = {
    name: '951'
}
var component1 = new Component();
var component2 = new Component();
component1.data.demo = '951';
console.log(component2.data.demo); // 951

  一个组件被复用多次的话,也就会创建多个实例。本质上,这些实例用的都是同一个构造函数。如果data是对象的话,对象属于引用类型,会影响到所有的实例。所以为了保证组件不同的实例之间data不冲突,data必须是一个函数。
  而 new Vue 的实例,是不会被复用的,因此不存在引用对象的问题。

posted @ 2021-08-24 20:12  底层951  阅读(1030)  评论(0)    收藏  举报