答:250
var wallet = {
total: 100,
//set就是
set save(price) {
this.total = this.total + price / 2;
}
}
wallet.save = 300; //並不是用函示,而是直接賦值
console.log(wallet.save);
答:125
var wallet = {
total: 100,
//set就是
set save(price) {
this.total = this.total + price / 2;
},
get save(){
//因Getter是取值所以要用return
return this.total / 2;
}
}
wallet.save = 300; //並不是用函示,而是直接賦值
console.log(wallet.save);
Getter注意
藍色:尚未點擊時
黃色:(...)點下去才執行取值Set
Object.defineProperty(wallet, 'save', {
configurable: true,
enumerable: true,
set: function (price) {
this.total = this.total + price / 2;
},
get: function () {
return this.total / 2;
}
});
wallet.save = 300;
console.log(wallet);
console.log(Object.getOwnPropertyDescriptor(wallet, "save"));
補充
屬性描述器
當對於屬性除了指定key/value以外有更進一步的要求時
例如設定屬性為read-only甚至是constant時,就可以使用屬性描述器
就算沒有屬性描述器,我們依然可以撰寫JavaScript
但使用屬性描述器可以讓我們的程式更為強健
#屬性的特徵
也就是 屬性的設定
實際上,屬性特徵有以下六種:
writable、configurable、enumerable 都會為 true
value 就代表屬性的值
get、set 則是沒有設定。
例 抓陣列中的值
答:3
var a = [1, 2, 3];
Object.defineProperty(Array.prototype,'latest',{
get: function () {
return this[this.length - 1];
}
})
console.log(a.latest);