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)