例1:var fe={dom
name:'leony',
$age:null,
get age(){
if(this.$age == undefined){ //this.$age == undefined 或 this.$age == null
return new Date().getFullYear()-1989;
}else{
return this.$age;
}
},
set age(val){
val = +val; //數字轉換,若爲非數字會轉爲NaN;
if(!isNaN(val)&&val>0&&val<150){
this.$age = +val;
}else{
throw new Error("Incorrect val = "+val);
}
}
}
console.log(fe.age)
fe.age='aaa'; //調取 fe 函數的 set 方法
console.log(fe.age)函數
例2:var person={};
Object.defineProperties(person,{ // Object.defineProperties 建立多個對象屬性;
title:{value:"fe",enumerable:true},
corp:{value:"baba",enumerable:true},
salary:{value:30000,enumerable:true,writable:true},
luck:{
get:function(){
return Math.random()>0.5?"good":"bad"
}
},
promote:{
set:function(level){
this.salary*=1+level*0.1;
}
}
})
console.log(Object.getOwnPropertyDescriptor(person,"title"));
console.log(person.salary);
console.log(person.luck);
person.promote=2;
console.log(person.salary);ui
Object.defineProperty(obj,"屬性",{定義方法});this
定義方法:enumerable:是否可枚舉,影響 for in 方法,爲"false"時不能被 for in 查找spa
writable:是否可被修改
prototype
configurable:是否可被 delete 方法刪除對象
Object.getOwnPropertyDescriptor(object,propertyname) : 獲取指定對象的自身屬性描述符。自身屬性描述符是指直接在對象上定義(而非從對象的原型繼承)的描述符繼承
object 必需。 包含屬性的對象。ip
propertyname 必需。 屬性的名稱。ci