set get访问器
创建对象时。可以直接使用get和set创建访问器
var obj={
_num:1,
set num(value){
this._num=value;
},
get num(){
return this._num;
},
a:function(){
},
b(){
}
}
在已有的对象中添加set和get访问器
var obj={};
//不能writable,value连用,只要使用setter和getter,不能使用writable,value
//第一种
Object.defineProperty(obj,"num",{
set:function(value){
this._num=value;
},
get:function(){
if(!this._num) this._num=1;
return this._num;
}
})
//第二种
Object.defineProperty(obj,"num",{
set(value){
this._num=value;
},
get(){
if(!this._num) this._num=1;
return this._num;
}
})
在ES6类中设置setter和getter访问器
class Box{
constructor(){
}
set num(value){
this._num=value;
}
get num(){
if(!this._num) this._num=1;
return this._num;
}
static set nums(value){
Box._nums=value;
}
static get nums(){
if(!Box.nums) Box.nums=0;
return Box.nums;
}
}
let b=new Box();
console.log(b);//打印得到的是_num
console.dir(Box);//打印得到的是nums
所有属性后面有等号,就意味设置该属性,也就会调用set方法
所有对象属性后面没有等号,就意味着调用该属性,也就会调用get方法
一旦使用set get这种访问属性,该属性不具备属性的存储功能
静态方法无法设置常量,可以利用get来实现