1.定義:該方法是在對(duì)象上定義一個(gè)新屬性,或者修改一個(gè)對(duì)象的現(xiàn)有屬性,并返回此對(duì)象。監(jiān)聽(tīng)對(duì)象下的某一個(gè)屬性,做數(shù)據(jù)劫持處理。
2.語(yǔ)法:Object.defineProperty(obj, prop, descriptor)
(1) 參一:要定義屬性的對(duì)象。
(2) 參二:要定義或修改的屬性的名稱(chēng)或 Symbol (被監(jiān)聽(tīng)的屬性)。
(3) 參三:要定義或修改的屬性描述符(存取描述符:options{getter,setter})。
(4) 返回值:被傳遞給函數(shù)的對(duì)象。
let params = {
? ? _name:'zhangsan'
}
Object.defineProperty(params,'name',{
? ? get(){
? ? ? ? console.log(5456);
? ? ? ? return '用戶(hù)名:'+this._name
? ? },
? ? set(val){
? ? ? ? this._name = val
? ? }
})
params.name = 'lisi'
document.write(params.name);// 用戶(hù)名:lisi
let obj = {
? ? _name:'zhangsan',
? ? _age:30
}
Object.defineProperties(obj,{
? ? name:{
? ? ? ? // configurable是否可以被delete刪除,默認(rèn)為true
? ? ? ? configurable:false,
? ? ? ? // writable是否可以被修改,默認(rèn)為true,不可以和set同時(shí)存在
? ? ? ? writable:false,
? ? ? ? // enumerable是否可以被for in 循環(huán),默認(rèn)為true
? ? ? ? enumerable:false
? ? },
? ? age:{
? ? ? ? // configurable:false,
? ? ? ? // writable:false,
? ? ? ? // enumerable:false
? ? ? ? get(){
? ? ? ? ? ? return 'age:'+this._age
? ? ? ? },
? ? ? ? set(val){
? ? ? ? ? ? this._age = val
? ? ? ? }
? ? }
})
。