1

以下の例では、「メイン」と呼ぶ JavaScript の「基本クラス」があります。作成するすべての子クラスで、メイン クラスのいくつかのメソッドと変数を使用したいと考えています。

現在のアイデアで以下の 2 つの例を作成しました。のインスタンスをいくつか作成するので、後者が好まれると思いますが、複数のインスタンスがある場合に便利mainだと聞きました。prototype

これら2つの方法のいずれかを使用する必要がありますか、それとも「クラス」間の継承を作成しようとしますか? 継承が優先される場合は、実装方法がわからないため、例を提供してください。

var main = (function(){

    var out = function() {};

    out.staticMethod = function(){
        alert('hello world');
    };

    return out;

})();

var child = (function(main){

    var out = function() {};

    out.prototype.useMainFunction = function(){
        main.staticMethod();
    };

    return out;

})(main);

var c = new child();
c.useMainFunction();

http://jsfiddle.net/mQPFJ/

var main = (function(){

    var out = function() {};

    out.prototype.publicMethod = function(){
        alert('hello world');
    };

    return out;

})();

var child = (function(main){

    var out = function() {};

    out.prototype.useMainFunction = function(){
        main.publicMethod();
    };

    return out;

})(new main());

var c = new child();
c.useMainFunction();

http://jsfiddle.net/mQPFJ/1/

4

2 に答える 2

5

別のアプローチを提案します。

function Main(){
  this.message = "Parent";
}

Main.prototype.out = function(){
    alert(this.message);
};

function Child(){
   this.message = "Child";
};

Child.prototype = new Main();

var child = new Child();
child.out();

var main = new Main();
main.out();

このアプローチでは、 を使用して 2 つのクラスを作成しますfunction constructor。最初のクラスには、関数が割り当てmainられたプロパティが与えられます。out2 番目のクラスのChildプロトタイプは の新しいインスタンスに割り当てられMain、2 つのクラス間の継承が作成されます。

作業例: http://jsfiddle.net/8QW46/

どのアプローチが最適かについてのあなたの質問に関して

プロトタイプを使用しない最初の方法を使用することをお勧めします。これを提案する理由は、実際にはクラスを使用していないためです (Javascript では、クラスはオブジェクト定義としてより適切に記述されます)。関数のインスタンスの作成。通常、プロトタイプはクラスのすべてのインスタンスに関数を追加するために使用されます。

これは、クラス/オブジェクト定義で利用できるアプローチを使用して達成できないことの例です: http://jsfiddle.net/smmb3/

于 2013-03-29T16:15:25.710 に答える
0
function Main(){
    this.out = function(message){
        alert(message);
    }
}

function Child(){
    this.message = "no more hello world programs";
}

Child.prototype = new Main;

var kid = new Child;
kid.out(kid.message);

@Kevinの答えに似ていますが、それはさらに冗長ではなく、現在のコードよりもはるかに乾燥しています。

于 2013-03-29T16:33:32.310 に答える