概述
我们知道,Vuejs通过Object.defineProperty
来对对象的属性进行改造,但是我有一个疑问,就是原来对象的那个数据属性去哪里了呢!
解答
其实,这个Object.defineProperty
api不仅可以为对象定义属性,也可以用来修改属性。也就是说,其实Vuejs就是将对象原有的数据属性,改造成了访问器属性。
举个🌰:
var obj = {};
//为obj对象声明一个数据属性a。
obj.a = 1;
console.log(Object.getOwnPropertyDescriptor(obj, a));
//{value: 1, writable: true, enumerable: true, configurable: true}
//将a属性改造成访问器属性
Object.defineProperty(obj, 'a', {get() {return 1}})
//再次查看属性的描述符
console.log(Object.getOwnPropertyDescriptor(obj, a));
//{set: undefined, enumerable: true, configurable: true, get: ƒ}
所以实际上Vuejs是将数据属性改造成了访问器属性。