對象有兩種屬性:(1)數據屬性,就是我們經常使用的屬性(2)訪問器屬性,也稱存取器屬性
存取器屬性就是一組獲取和設置值的函數。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關鍵字