2017-01-29 4 views
1

JQueryプラグインを開発しています。私はプラグインの中でOOPを使う必要があります。しかし、クラスは私が期待どおりに動作しません。クラスの新しいインスタンスを開始すると、実行中のコードの最初の行に過ぎません。このコードで何が問題になっていますか?また、開始時にこのクラスのコンストラクタを実行する方法は?ここでJQueryプラグインクラスが動作しない

(function ($) { 
    var FunClass; 

    FunClass = function() { 
    console.log("FunGlobal"); 

    function FunClass() { 
     console.log("FunConstructor"); 
    } 

    FunClass.prototype.letsFun = function() { 
     console.log("FunMethod"); 
    } 
    }(); 

    $.fn.fun = function() { 
    var funClass; 

    return this.each(function() { 
     funClass = new FunClass(); 
     funClass.letsFun(); 
    }); 
    }; 
}(jQuery)); 

は、コンソール出力は次のとおりです。助けをConsole Output

感謝。

+0

あなたはクラスの新しいインスタンスを開始するにはどうすればよいですか? –

+0

ここでは、クラスを持っていないことを明確にしましょう。あなたはオブジェクトである関数を持っています。オブジェクトのすべてのメソッドは、関数のプロトタイプで宣言され、コンストラクタ関数自体の本体には書き込まれません。 –

+0

このコードを例として使用しました。[link](https://github.com/ludo/jquery-treetable/blob/master/jquery.treetable.js)。このような方法(ノードとツリー)が使用されています。あなたは@ScottMarcusを言ったように私はプロトタイプのすべてのメソッドを宣言する必要がありますか?次に、このクラスのコンストラクタをどのように呼び出すべきですか? – BigSant

答えて

0

あなたがFunClassを返すのを忘れてきたようだ:

(function($) { 
 
    var FunClass; 
 

 
    FunClass = (function() { 
 
    console.log("FunGlobal"); 
 

 
    function FunClass() { 
 
     console.log("FunConstructor"); 
 
    } 
 

 
    FunClass.prototype.letsFun = function() { 
 
     console.log("FunMethod"); 
 
    } 
 
    return FunClass; // you missed this line 
 
    })(); 
 

 
    $.fn.fun = function() { 
 
    var funClass; 
 

 
    return this.each(function() { 
 
     funClass = new FunClass(); 
 
     funClass.letsFun(); 
 
    }); 
 
    }; 
 
}(jQuery)); 
 

 
// Usage 
 
$(function() { 
 
    $('body').fun(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+1

ありがとうございました。それは動作します! – BigSant

関連する問題