メタプログラミングを学ぶ Proxy, Reflect, get, Math, メソッド化
ハンズオンJavaScript (あんどうやすし(著)、オライリー・ジャパン)の11章(メタプログラミングを学ぶ)、11.4(練習問題)の11-1の解答を求めてみる。
コード
let extendNumber = num => new Proxy(Object(num), {
get(target, prop) {
if (prop in target) {
let p = Reflect.get(target, prop);
if (typeof p == 'function') {
return p.bind(target);
}
return p;
}
if (prop in Math) {
return (...args) => Math[prop](target, ...args);
}
return undefined;
}
}),
en = extendNumber(3.14),
ens = [
en.round(),
en.ceil(),
en.pow(2),
en.toString(),
];
for (const n of ens) {
console.log(n);
}
入出力結果(Terminal, Zsh)
% node main.js
3
4
9.8596
3.14
%