pcwu's TIL Notes


[JS] Getter and Setter 筆記

在 JavaScript 中如果 Class 在取屬性值或設定屬性值時,如果有比較複雜的運用時,可以使用 GetterSetter

例如取不到值時不想回傳 undefined ,設定值小於零時設成將它以大於零來儲存時:(私有屬性習慣前面以 _ 作為區隔)

class Option {
    constructor(key, value, autoLoad = false) {
        if (typeof key != 'undefined') {
            this['_' + key] = value;
        }
        this.autoLoad = autoLoad;
    }

    get grade() {
      if (this._grade !== undefined) {
        return this._grade
      } else {
        return 'no grade prop'
      }
    }

    set grade(value) {
      if (value < 0) {
        this._grade = -1 * value
      } else {
        this._grade = value
      }
    }
}

const op1 = new Option('grade', 99)
console.log(op1.grade) // 99

const op2 = new Option('color', 'red')
console.log(op2.grade) // no grade prop

op2.grade = -59
console.log(op2.grade) // 59

Reference