vue里面的属性定义都是用Object的defineProperty来实现的,而defineProperty低版本浏览器不支持。
这也是Vue为什么会有浏览器限制的问题。
语法
Object.defineProperty(obj, prop, descriptor)
obj:需要定义属性的对象
prop:需要定义的属性
descriptor:属性的描述描述符
返回值:返回此对象
看看用法:
et obj = Object.create(null);
let descriptor = {
configurable:false,
writable:false,
enumerable:false,
value:'hello world'
};
Object.defineProperty(obj,'hello',descriptor);
console.log(obj.hello);//hello world
这样就给obj定义上了一个hello属性
看看set和get的用法:
关于无限循环的问题:
当操作到对应的对象的属性由于赋值操作的时候,会触发这个set函数,如果在set函数里面,还对这个定义的属性进行赋值操作,那么又会触发set函数,这样就造成无限递归了。对应的set操作也是同理