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 的实例,是不会被复用的,因此不存在引用对象的问题。

浙公网安备 33010602011771号