不可以,因为不管是computed还是data都会挂载到vm实例上,如果同名的话,根据js编译代码从上往下执行的机制,前面的属性就会被后面定义的属性覆盖
function initState (vm) {
vm._watchers = [];
var opts = vm.$options;
if (opts.props) { initProps(vm, opts.props); }
if (opts.methods) { initMethods(vm, opts.methods); }
if (opts.data) {
initData(vm);
} else {
observe(vm._data = {}, true /* asRootData */);
}
if (opts.computed) { initComputed(vm, opts.computed); }
if (opts.watch && opts.watch !== nativeWatch) {
initWatch(vm, opts.watch);
}
}
以上为vue的部分源码,可以看出判断顺序:
props > methods > data > computed > watch
由上图的部分源码可知,不仅仅只是computed和data的属性不能同名,props,methods,data,computed,watch都不可以同名.我们应该养成良好的编码习惯,不论在什么时候都应该保持自己定义的属性名的唯一性.