1. 程式人生 > >JS中的getter和setter

JS中的getter和setter

obj fine pre script5 ret UNC efi 定義 rip

對象有兩種屬性:(1)數據屬性,就是我們經常使用的屬性(2)訪問器屬性,也稱存取器屬性

存取器屬性就是一組獲取和設置值的函數。在ECMAScript5中,屬性值可以getter和setter方法獲取和設置,因此getter和setter定義的屬性被稱為存取器屬性。getter負責獲取值,它不帶任何參數。setter負責設置值,在它的函數體中,一切的return都是無效的。

var o = {
  get val(){
    /*函數體*/
    return ;
  },
  set val(n){
    /*函數體*/
  }
}

在對象內如果設置了存取器屬性,如果某一變量只聲明了getter方法,那麽它僅僅只可讀而不可寫。如果只聲明了setter方法,那麽讀到的該變量值永遠都是undefined。

//只聲明getter方法時不能通過getter方法來改變變量值
var obj = {
  a: 3,
  b: 8,
  get val() {
    return this.a;
  }
}

console.log(obj.val);     //3
obj.val= 100;
console.log(obj.val); //3

//只聲明setter方法時不能獲取變量的值
var obj = {
  a: 3,
  b: 8,
  set val(n) {
    this.a = n;
  }
}
console.log(obj.val);     //undefined
obj.val= 100;
console.log(obj.val); 
//undefined console.log(obj.b);  //8 其他變量不受影響 //同時聲明兩種方法 var obj = { a: 3, b: 8, get val(){ return this.a; }, set val(n) { this.a = n; } } console.log(obj.val); //3 obj.val= 100; console.log(obj.val); //100

setter和getter方法在定義時並未用function關鍵字,事實上這裏的get或set,你可以理解為兩種不同狀態下的function:包容的一面(寫),安全的一面(讀)。當不通過存取器屬性而是直接按平時習慣拿數據屬性時,獲取和設置都不受影響,或許這兩個方法時為了以後的安全設計的吧。

JS中的getter和setter