開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- JavaScript (プログラミング言語)
- Node.js, Safari(JavaScript エンジン)
- Learning JavaScript [邦訳](参考書籍)
メタプログラミングRuby 第2版(Paolo Perrotta (著)、角 征典 (翻訳)、オライリージャパン)の1部(メタプログラミング Ruby)、6章(金曜日: コードを記述するコード)、6.7(フックメソッド)、6.7.1(その他のフック)を JavaScript で取り組んでみる。
HTML5
<pre id="output0"></pre> <button id="run0">run</button> <button id="clear0">clear</button> <script src="sample3.js"></script>
JavaScript
let btn0 = document.querySelector('#run0'),
btn1 = document.querySelector('#clear0'),
pre0 = document.querySelector('#output0'),
p = (x) => pre0.textContent += x + '\n';
let M1 = (othermod) => {
p(`M1 は ${othermod} にインクルードされた`);
let that = {};
return that;
};
let M2 = (othermod) => {
p(`M2 は ${othermod} にプリペンドされた`);
let that = {};
return that;
};
let C = (() => {
let that1 = M1('C'),
that2 = M2('C');
return () => {
let that = {};
Object.keys(that1).forEach((k) => that[k] = that1[k]);
Object.keys(that2).forEach((k) => that[k] = that2[k]);
return that;
};
})();
let M = (() => {
let that = {},
addMethod = (name, method) => {
p(`新しいメソッド:M#${method}`);
that[name] = method;
};
addMethod('myMethod', () => 'myMethod');
return () => {
return that;
};
})();
let output = () => {
p('6.7 フックメソッド');
p('6.7.1 その他のフック');
let m = M();
p(m.myMethod());
};
btn0.onclick = output;
btn1.onclick = () => pre0.textContent = '';
output();
0 コメント:
コメントを投稿