一、Getter和Setter
在JavaScript中,所有的對象都有兩種基本操作:讀取和設置屬性值。訪問器是一種方式,通過函數的方式,可以讓我們更好地控制屬性值的讀取和設置操作。在ECMAScript 5中,引入了getter和setter訪問器函數,以更好的控制屬性值的讀取和設置操作。
二、Getter和Setter的實現
為了實現getter和setter訪問器函數,我們需要使用對象字面量或者Object.defineProperty方法。
// 使用對象字面量實現getter和setter let obj = { // 聲明一個私有變量 _name: 'Tom', // getter函數 get name() { console.log('get name'); return this._name; }, // setter函數 set name(val) { console.log('set name'); this._name = val; } };
或者使用Object.defineProperty方法來實現:
let obj = {}; let name = 'Tom'; Object.defineProperty(obj, 'name', { get: function() { console.log('get name'); return name; }, set: function(val) { console.log('set name'); name = val; } });
三、Getter和Setter的特點
getter和setter訪問器函數具有以下幾個特點:
1、getter訪問器函數不需要參數,但需要有返回值;setter訪問器函數只有一個參數,但沒有返回值。
2、getter和setter函數名稱是固定的,不能更改。
3、getter和setter訪問器函數可以與屬性值一起定義在一個對象中。
4、getter和setter訪問器函數只會在調用時被執行。
5、getter和setter訪問器函數可以用來驗證輸入值。
四、Getter和Setter的應用場景
getter和setter訪問器函數可以應用於以下場景:
1、計算屬性:getter函數可以計算屬性值並返回結果,這樣可以避免使用者自己計算屬性值。
let obj = { _a: 1, _b: 2, get c() { return this._a + this._b; } }; console.log(obj.c); // 3
2、封裝私有變量:將對象的屬性設置為私有變量,並使用getter和setter訪問器函數來控制對私有變量的訪問。
let Person = (function() { let name = 'Tom'; return { get name() { console.log('get name'); return name; }, set name(val) { console.log('set name'); name = val; } }; })(); console.log(Person.name); // Tom Person.name = 'Jerry'; console.log(Person.name); // Jerry
3、數據驗證:使用setter函數來驗證輸入值,確保輸入值的合法性。
let person = { _name: '', set name(val) { if (typeof val !== 'string') { console.log('name must be a string!'); return; } this._name = val; }, get name() { return this._name; } }; person.name = 'Tom'; console.log(person.name); // Tom person.name = 123; // name must be a string!
五、總結
通過此篇文章,我們了解了在JavaScript中如何使用getter和setter訪問器函數來控制屬性值的讀取和設置操作。我們還對getter和setter的實現方式、特點以及應用場景進行了詳細的探討。應該說,getter和setter訪問器函數是JavaScript對象的重要組成部分,對於對象的封裝和控制非常有幫助。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/190594.html