关于Object.difineProperty的用法很简单,就是传三个参数(对象,属性,一些可配置的属性)
Object.difineProperty(obj,prop,descriptor)
function defineproperty(){ var _obj={} Object.defineProperty(_obj,'a',{ value:40, // writable:false, //是否可编辑 // enumerable:true //是否可枚举 }) return _obj } var Obj=defineproperty(); console.log(Obj.a) //访问a的值 // Obj.a='fsdfsd'; // console.log(Obj) //writable默认为false,,表示不可修改,当设置为true之后Obj里面的a值就可以修改 打印出 {a: "fsdfsd"},否则不可修改 for(key in Obj){ //enumerable默认为false,表示不可枚举,设置为true之后才能打印出Obj里面的属性 console.log('ff'+key) }
重点是Object.difinePropertyies,最常用,很多响应式都是使用它实现的,它里面有getter,setter方法来监听对数据的操作(数据劫持)
function Defineproperties(){ var _obj={} let obj=Object.defineProperties(_obj,{ a:{ get(){ }, set(newval){ console.log('设置了'+newval) } }, b:{ get(){ return '获取的时候b改为:哈哈' }, set(newval){ console.log('设置了b'+newval) } } }) return obj; } var difineObj=Defineproperties(); console.log(difineObj.b) // 获取的时候b改为:哈哈