JavaScript 規約②

継承

thatに親クラスを代入することで継承をおこなう。


    var Animal = function (name) {    //親クラス
        var _name = name;
        var that = {};
        that.getName = function () {
            return _name;
        };
        return that;
    };

    var Cat = function (name) {    //子クラス
        var _name = name;
        var that = Animal(_name);
        return that;
    };

    //メソッドgetNameは子クラスで定義しなくても
    //親クラスから継承されている
    var cat = Cat("Liz");
    var name = cat.getName();    //name => "Liz"


オーバーライド

メソッドはオーバーライド(上書き)することもできる。


    var Animal = function (name) {    //親クラス
        var _name = name;
        var that = {};
        that.getName = function () {
            return _name;
        };
        that.say = function () {
            return "Hello! My name is " + _name + "!";
        };
        return that;
    };

    var Cat = function (name) {    //子クラス
        var _name = name;
        var that = Animal(_name);
        that.say = function () {    //オーバーライド
            return "Hello! My name is " + _name + "! I'm cat!!";
        };
        return that;
    };

    var cat = Cat("Liz");
    var word = cat.say();    //word => "Hello! My name is Liz! I'm cat!!"


オーバーライドされても継承元(親クラス)のメソッドを呼び出すことも可能。そのためにはまず以下の準備をしておく。


    //第一引数の名前のメソッドを拡張する
    //すべての関数で利用できる
    Function.prototype.method = function (name, func) {
        this.prototype[name] = func;
        return this;
    };

    //継承元のメソッドを呼び出すメソッドを拡張
    Object.method('superior', function (name) {
        var that = this, method = that[name];
        return function () {
           return method.apply(that, arguments);
        };
    });


よりクールに書き換えられる。


    var Cat = function (name) {    //子クラス
        var _name = name, that = Animal(_name);

        //あらかじめ継承元のメソッドをセットしておく 
        var superSay = that.superior('say');
        that.say = function () {    //オーバーライド
            return superSay() + "! I'm cat!!";
        };
        return that;
    };

    var cat = Cat("Liz");
    var word = cat.say();    //word => "Hello! My name is Liz! I'm cat!!"


JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford
オライリージャパン
売り上げランキング: 5275

0 件のコメント:

コメントを投稿