Getter 與 Setter (賦值運算不使用函式)


Posted by hoyi-23 on 2021-08-13

什麼時候會用到 Getter 與 Setter?

var money = { total : 100 };
money.total = 300;
console.log(money.total); //300

上面這樣的做法,會直接將money.total = 300;的值,賦蓋到原本的屬性上。
若我們希望在取值或覆蓋時,可以做一些運算或調整,就可以用到Getter 與 Setter。

Getter: 取得特定值的方法
Setter: 存值的方法


寫法一:使用 get、set關鍵字

使用 get、set關鍵字去設定getter、setter 方法。

var money = { 
    total : 100
    set save(price){
        //這裡就是一個函式的概念,可以傳入參數
        this.total += price
    },
    get saving(){
        //get是取值的概念,不會傳入參數
        return this.total
    }
};
money.save = 300; //300會透過參數的方式傳入save函式
console.log(money.saving); //400
console.log(money.total); //400


money.save = 300; //300會透過參數的方式傳入save函式
console.log(money.saving); //700
console.log(money.total); //700

寫法二: 使用 Object.defineprooerty()

使用 Object.defineprooerty() 設定屬性特徵的語法,去設定getter、setter

Object.defineProperty(money,'save',{
    set: function(price){this.total += price },
    get: function(){return this.total}
})
//'save'的屬性特徵的預設是不可被刪除、也不可被列舉的

其他範例

使用 Object.defineprooerty()陣列原型內加入一個屬性特徵。

Object.defineProperty{ Array.prototype, 'lastest', {
    get: function(){
        return this[this.length-1];
        //取得最後一個資料
        }
    }
}
//因為是在陣列原型加入,所有的陣列都可以用

var a = [1,2,3]
console.log(a.lastest); // 3

#setter #getter







Related Posts

Simple Twitter 專案開發心得

Simple Twitter 專案開發心得

[day 01] this & bind: 你不能不知道的

[day 01] this & bind: 你不能不知道的

Clock

Clock


Comments