问题:
为什么 new Vue({data: {a: 123})不会报错,而 new Vue({data: new Date()})会报"data functions should return an object"呢?
注意不是问 data 为什么要 function,而是{a: 123}和 new Date()都是 Object,为什么后者会报错,本质区别在什么地方?
关于为什么要传这么奇怪的参数:
是这样的,我在用 ElementUI 里面的$message.error()方法的时候,不小心传了个 Error 对象进去(应该传 message 字符串或者 options 对象),然后就报出了上述错误。出于好奇,我研究了一下 Element 的源码,发现这个参数最终是被传给了 new Vue({data: xxx}), 也就是说是 new Vue({data: new Error()})这句话报了上面的错。
然后我又试了一下,new Vue({data: xxx})里面,xxx 用任何 js 内置对象(Date/Array/Boolean...)都报"data functions should return an object",而用自定义的对象就不会,又打开 vue 的源码,搜了一下这句话没搜到,到这里我就无能为力了。
这问题好像没什么意义,毕竟正常人不会用内置对象去做组件 data,但是没弄清楚浑身难受。