问题:
为什么 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,但是没弄清楚浑身难受。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.