開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- JavaScript (プログラミング言語)
- Node.js, Safari(JavaScript エンジン)
- Learning JavaScript [邦訳](参考書籍)
メタプログラミングRuby 第2版(Paolo Perrotta (著)、角 征典 (翻訳)、オライリージャパン)の1部(メタプログラミング Ruby)、2章(月曜日: オブジェクトモデル)、2.1(オープンクラス)、2.1.1(クラス定義の内部)を JavaScript で取り組んでみる。
HTML5
<button id="run0">run</button> <button id="clear0">clear</button> <pre id="output0"></pre> <script src="sample1.js"></script>
JavaScript
let btn0 = document.querySelector('#run0'), btn1 = document.querySelector('#clear0'), pre0 = document.querySelector('#output0'); let p = (s) => { pre0.textContent += s + '\n'; }; let range = (...args) => { let len = args.length, start, end, step; if (len === 1) { start = 0; end = args[0]; step = 1; } else if (len === 2) { start = args[0]; end = args[1]; step = 1; } else if (len === 3) { start = args[0]; end = args[1]; step = args[2]; } else { throw { type: 'ArgumentError', message: "wrong number of arguments" }; } let result = []; for (let i = start; i < end; i += step) { result.push(i); } return result; }; let toAlphanumeric = (s) => { return s.replace(/[^\w\s]/g, ''); }; String.prototype.toAlphanumeric = function () { return this.replace(/[^\w\s]/g, ''); }; let C = (spec) => { let that = {}; return that; }; let wrapper = (o) => { p('Hello'); return o(); }; let D = { x : () => 'x'} D.y = () => 'y'; let output = () => { p('3 the Magic Number' === toAlphanumeric('#3, the *Magic, Number*?')); p('3 the Magic Number' === '#3, the *Magic, Number*?'.toAlphanumeric()); // 2.1.1 クラス定義の内部 range(3).forEach(() => { wrapper(C); }); let obj = Object.create(D); p(obj.x()); p(obj.y()); }; btn0.onclick = output; btn1.onclick = () => { pre0.textContent = ''; }; output();
0 コメント:
コメントを投稿