Object.defineProperty()
方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
Object.defineProperty(obj, prop, descriptor)
get
属性的 getter 函数,如果没有 getter,则为 undefined
。当访问该属性时,会调用此函数。执行时不传入任何参数,但是会传入 this
对象(由于继承关系,这里的this
并不一定是定义该属性的对象)。该函数的返回值会被用作属性的值。
默认为 undefined
。
set
属性的 setter 函数,如果没有 setter,则为 undefined
。当属性值被修改时,会调用此函数。该方法接受一个参数(也就是被赋予的新值),会传入赋值时的 this
对象。
默认为 undefined
。
描述符默认值汇总
拥有布尔值的键 configurable
、enumerable
和 writable
的默认值都是 false
。
属性值和函数的键 value
、get
和 set
字段的默认值为 undefined
。
let obj = {
firstName:'xiaoming',
lastName:'li'
}
Object.defineProperty(obj,'fullName',{
get(){//当访问对象的属性时 会调用该方法,该方法必须要有个返回值 返回值就是要访问的属性值
return this.firstName +"-"+this.lastName;
},
set(value){//其中value 为最新的值
this.firstName = value.split("-")[0];
this.lastName = value.split("-")[1];
}
})
console.log(obj.fullName)
obj.fullName = "xiaohuang-li";
console.log(obj.fullName)