2017年4月29日土曜日

開発環境

メタプログラミングRuby 第2版(Paolo Perrotta (著)、角 征典 (翻訳)、オライリージャパン)の1部(メタプログラミング Ruby)、5章(木曜日: クラス定義)、5.4(特異クラス)、5.4.1(特異メソッドの謎)、5.4.3(メソッド探索再び)を JavaScript で取り組んでみる。

HTML5

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

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

JavaScript

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

let MyClass = () => {
    let that = {},
        myMethod = () => 'myMethod';

    that.myMethod = myMethod;

    return that;
};

MyClass.myClassMethod = () => 'myClassMethod';

let C = () => {
    let that = {},
        aMethod = () => 'C#aMethod()';

    that.aMethod = aMethod;

    return that;
};

C.aClassMethod = () => 'C.aClassMethod';

let D = () => {
    let that = C();

    return that;
};
Object.keys(C).forEach((k) => {
    D[k] = C[k];
});

let MyClass1 = () => {
    let that = {};

    return that;
};
let output = () => {
    let obj = MyClass();

    p('5.4.1 特異メソッドの謎')
    p(obj.myMethod());
    
    obj.mySingletonMethod = () => 'mySingletonMethod';
    p(obj.mySingletonMethod());

    p(MyClass.myClassMethod());

    p('5.4.3 メソッド探索再び');
    p('メソッド探索のおさらい');
    obj = D();
    p(obj.aMethod());

    p('特異クラスとメソッド探索');
    obj.aSingletonMethod = () => 'aSingletonMethod';
    p(obj.aSingletonMethod());
    p(obj.aMethod());
    p(D.aClassMethod());
    
    p('クラスのアトリビュート');
    MyClass1.c = 'It works!';
    p(MyClass1.c);
};

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

output();




  








						

0 コメント:

コメントを投稿