Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
<script type="text/javascript">
Vue.config.productionTip=false;
let number=3
let person={
name:'付强',
sex:'男',
}
Object.defineProperty(person,'age',{
// value:number,
// enumerable : true,
// writable:true,
set:function(value){
value++;
number=value;
},
get:function(){
return number;
},
});
console.log(person) ;
</script>
Object.defineProperty(obj, prop, descriptor) 三个参数 被操作的对象 string的属性名 要添加的对象值
configurable
当且仅当该属性的 configurable 键值为 true 时,该属性的描述符才能够被改变,同时该属性也能从对应的对象上被删除。
默认为 false。
enumerable
当且仅当该属性的 enumerable 键值为 true 时,该属性才会出现在对象的枚举属性中 也就是说只有为true时才可以被遍历。
默认为 false。
enumerable
当且仅当该属性的 enumerable 键值为 true 时,该属性才会出现在对象的枚举属性中。
默认为 false。
get
当要操作Object.defineProperty要修改的属性名时就会触发get函数,给一个return返回后的参数将赋值给defineProperty要操作的属性名。
属性的 getter 函数,如果没有 getter,则为 undefined。当访问该属性时,会调用此函数。执行时不传入任何参数,但是会传入 this 对象(由于继承关系,这里的this并不一定是定义该属性的对象)。该函数的返回值会被用作属性的值。
默认为 undefined。
set
就是说当要给defineProperty要操作的这个属性名赋值时,属性值被修改的时候就会触发set函数
属性的 setter 函数,如果没有 setter,则为 undefined。当属性值被修改时,会调用此函数。该方法接受一个参数(也就是被赋予的新值),会传入赋值时的 this 对象。