2017年4月26日水曜日

開発環境

メタプログラミングRuby 第2版(Paolo Perrotta (著)、角 征典 (翻訳)、オライリージャパン)の1部(メタプログラミング Ruby)、5章(木曜日: クラス定義)、5.1(クラス定義のわかりやすい説明)、5.1.1(クラス定義の中身)、5.1.2(カレントクラス)、5.1.3(クラスインスタンス変数)を JavaScript で取り組んでみる。

HTML5

<pre id="output0"></pre>
<button id="run0">run</button>
<button id="clear0">clear</button>

<script src="sample1.js"></script>

JavaScript

let btn0 = document.querySelector('#run0'),
    btn1 = document.querySelector('#clear0'),
    pre0 = document.querySelector('#output0'),
    p = (x) => pre0.textContent += x + '\n';

let addMethodTo = (aClass) => {
    aClass.prototype.m = () => 'Hello!';
};

let MyClass1 = (my) => {
    let that = {},
        myVar = 1,
        read = () => myVar,
        write = () => myVar = 2;

    that.read = read;
    that.write = write;
    
    return that;
};
let output = () => {
    p('5.1.1 クラスの定義の中身');
    let MyClass = (() => {
        p('Hell');
        return () => {
            let that = {},
                toString = () => 'myClass';

            that.toString = toString;

            return that;
        };
    })();
    
    let obj = MyClass();
    p(obj);

    p('5.1.2 カレントクラス');
    p('class_eval');
    addMethodTo(String);
    p('abc'.m());
    p('5.1.3 クラスインスタンス変数');
    MyClass1.myVar = 1;
    MyClass1.read = () => MyClass1.myVar;
    obj = MyClass1();
    p(obj.read());
    obj.write();
    p(obj.read());
    p(MyClass1.read());
};

btn0.onclick = output;
btn1.onclick = () => pre0.textContent = '';

output();




  









						

0 コメント:

コメントを投稿