開発環境
- 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 コメント:
コメントを投稿