Graviness Blog

算数・数学・科学・電脳・雑記・アホの順の密度で記事が構成されます。
<< October 2020 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >> ブログランキング・にほんブログ村へ
 
RECOMMEND
ビッグバン宇宙論 (上)
ビッグバン宇宙論 (上) (JUGEMレビュー »)
サイモン・シン, 青木 薫
RECENT COMMENT
  • パスワード自動生成 (Automated Password Generator)
    優乃 (07/29)
  • パスワード自動生成 (Automated Password Generator)
    Okono (07/29)
  • パスワード自動生成 (Automated Password Generator)
    優乃 (07/21)
  • 「物理定数」改め「自然定数」の続き
    式神自然数 (07/03)
  • パスワード自動生成 (Automated Password Generator)
    KK (07/02)
  • パスワード自動生成 (Automated Password Generator)
    優乃 (06/29)
  • パスワード自動生成 (Automated Password Generator)
    KK (06/29)
  • パスワード自動生成 (Automated Password Generator)
    KK (06/29)
  • パスワード自動生成 (Automated Password Generator)
    優乃 (06/22)
  • パスワード自動生成 (Automated Password Generator)
    Okono (06/22)
RECENT TRACKBACK
MOBILE
qrcode
PROFILE
無料ブログ作成サービス JUGEM
 
【JavaScript】多重に派生されたクラスのコンストラクタで,基底クラスのコンストラクタを呼び出す方法 (2)
前回の続き.先ず,3件のトラックバックと解決方法を頂いたことに感謝.以下に時系列で示す.

0. 多重に派生されたクラスのコンストラクタで,基底クラスのコンストラクタを呼び出す方法@Graviness Blog
1. 基底クラスのコンストラクタを呼び出す@Days on the Moon
2. 継承元のコンストラクタを順々に呼び出す。@JavaScriptっぽい。
3. 基底クラスコンストラクタ呼び出しの落とし穴@Days on the Moon

nanto_viさん,PURESTさんありがとう!

さて,上記一連の記事を読んでもらうと分かりますが,以下の方法が良いと判断しました.このコードは達人でもなかなか書けない代物ですよ!凄い!
/**
 * 継承関数.
 * @param subClass 派生クラス
 * @param superClass 基底クラス
 */

function inherit(subClass, superClass) {
    var Temp = new Function();
    Temp.prototype = superClass.prototype;
    subClass.prototype = new Temp;
    subClass.prototype.constructor = subClass;
    subClass.prototype.__super__ = function () {
        var originalSuper = this.__super__;
        this.__super__ = superClass.prototype.__super__ || null;

        superClass.apply(this, arguments);

        if (this.constructor == subClass)
            delete this.__super__;
        else
            this.__super__ = originalSuper;
    };

}



function SuperSuperClass() {
    alert("SuperSuperClass Constructor");

    this.p = "supersuperclass";
}

function SuperClass() {
    alert("SuperClass Constructor");
    this.__super__(); // SuperSuperClassのコンストラクタを呼び出す.

    this.q = "superclass";
}

function SubClass() {
    alert("SubClass Constructor");
    this.__super__(); // SuperClassのコンストラクタを呼び出す.

    this.r = "subclass";
}

// 継承
inherit(SuperClass, SuperSuperClass);
inherit(SubClass, SuperClass);
コメント
コメントする









 
トラックバック
この記事のトラックバックURL
トラックバック機能は終了しました。
 

(C) 2020 ブログ JUGEM Some Rights Reserved.