8

次の例を確認してください。

MyBaseClass = function(a) {
     this.a = a;
};

$.extend(MyBaseClass.prototype, {
    init: function() {
        console.log('I am initializing the base class');
    }
});

MyChildClass = $.extend(MyBaseClass, {
    init: function() {
        MyBaseClass.prototype.init();
        console.log('I am initializing the child class');
    }
});

var = new MyChildClass();
var.init();

これにより、「基本クラスを初期化しています」と「子クラスを初期化しています」の両方が出力されます。

クラス MyBaseClass を継承できるようにする必要がありますが、新しい init() メソッドの先頭で彼の init() メソッドを呼び出すことができる必要があります。

それ、どうやったら出来るの?

4

3 に答える 3

19

jQueryのextendは継承を構築しませんが、「2つ以上のオブジェクトの内容を最初のオブジェクトにマージします」 .

プロトタイプベースの継承を使用して継承を実現し、「スーパー」メソッドを明示的に呼び出します。

MyBaseClass = function(a) {
     this.a = a;
};
MyBaseClass.prototype.init = function() {
    console.log('I am initializing the base class');
};

MyChildClass = function(a) {
  this.a = a;
}
MyChildClass.prototype = Object.create(MyBaseClass.prototype); // makes MyChildClass "inherit" of MyBaseClass
MyChildClass.prototype.init = function() {
    MyBaseClass.prototype.init.call(this); // calls super init function
    console.log('I am initializing the child class');
};

var child= new MyChildClass();
child.init();

出力:

I am initializing the base class
I am initializing the child class 
于 2013-04-08T09:48:27.680 に答える