Vue 组件中的 data 为什么必须是函数
2019-02-18 本文已影响9人
Nian糕
Unsplash
在 new Vue()
中,data
是可以作为一个对象进行操作的,然而在 component
中,data
只能以函数的形式存在,不能直接将对象赋值给它
new Vue({
el: '#app',
data: {
message: 'Love'
},
template: '<p>It’s great to love cakes.</p>'
})
Vue.comments('todo-item', {
data: function(){
return {
message: 'Love'
}
},
template: '<p>It’s great to love cakes.</p>'
})
这并非是 Vue 自身如此设计,而是跟 JavaScript 特性相关,我们来回顾下 JavaScript 的原型链
var Component = function() {};
Component.prototype.data = {
message: 'Love'
}
var component1 = new Component(),
component2 = new Component();
component1.data.message = 'Peace';
console.log(component2.data.message); // Peace
以上两个实例都引用同一个对象,当其中一个实例属性改变时,另一个实例属性也随之改变,只有当两个实例拥有自己的作用域时,才不会互相干扰
var Component = function() {
this.data = this.data()
}
Component.prototype.data = function(){
return {
message: 'Love'
}
}
var component1 = new Component(),
component2 = new Component();
component1.data.message = 'Peace';
console.log(component2.data.message);
End of File
行文过程中出现错误或不妥之处在所难免,希望大家能够给予指正,以免误导更多人,最后,如果你觉得我的文章写的还不错,希望能够点一下喜欢和关注,为了我能早日成为简书优秀作者献上一发助攻吧,谢谢!^ ^