什麼時候會用到 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