Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

getterとsetterを使って既存オブジェクトを拡張する

javascriptはgetterとsetterを使うことで既存オブジェクトを拡張する事ができます。

実際のところ

通常、Dateクラスにはyearという名前の関数はありません。

let now = new Date;
console.log(now.year);
//> undefined

Date.prototypeに手を加える事でyearメソッドを追加することが可能となります。

var d = Date.prototype;
Object.defineProperty(d, "year", {
  get: () => {return this.getFullYear() },
  set: (y) => { this.setFullYear(y) }
});

挙動はこんな塩梅

let now = new Date;
console.log(now);
//> Sat May 28 2016 21:35:33 GMT+0900 (JST)

console.log(now.year); 
//> 2016


now.year = 2001;
console.log(now.year); 
//> 2001

now変数は年だけ更新されている事が確認できます。

console.log(now); 
//> Mon May 28 2001 21:35:33 GMT+0900 (JST)