読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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)