JS中的getter和setter
阿新 • • 發佈:2019-01-29
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