0

エラーとメッセージをデータベースに記録するための独自のクラスを作成しようとしていますが、Javascript でカスタム クラスとメソッドを作成するのは初めてです。十分な調査の後、次のコードをまとめることができました。

    function log ()
    {
    }

    log.error = function (currentFunction, logMessage)
    {
        createLog (currentFunction, logMessage, "Error");
    }

log.errorそして、次の方法で関数を正常に呼び出すことができます。

    log.error("current function name", "this is my error message");

私の質問はこれです:私が見たサイトのほとんどは、代わりに次のようにコードを整理すると言っていました:

    function log ()
    {
        this.error = function (currentFunction, logMessage)
        {
            createLog (currentFunction, logMessage, "Error");
        }
    }

しかし、そのエラー関数を呼び出そうとすると、次のエラーが発生します。

オブジェクト関数ログ (currentFunction、logMessage) に関数エラーが見つかりません

これがなぜなのか誰か知っていますか?コードをきれいに保つために、すべてを 1 つの関数内に配置できるようにしたいのですが、この時点では、上記の最初のコード ブロックのように、すべてを分離する必要があるようです。

編集 - 私の解決策

dystroy と Jose Vega の両方に感謝します (申し訳ありませんが、Jose さん、私にはあなたの回答に賛成票を投じるほどの評判がありません)。dystroy のソリューションを使用することになったのは、将来コードを維持するのが簡単になると感じたからですが、Jose の回答は、私がやろうとしていたことと利用可能なさまざまなオプションについての洞察を得るのに役立ちました。var objectName = {}あなたがvsのようなことをしたときに何が起こっているのかをよりよく理解していると感じていますfunction className () {}

これが私の新しいコードです:

    function log ()
    {
        log.prototype.error = function (currentFunction, logMessage)
        {
            createLog (currentFunction, logMessage, "Error");
        }

        log.prototype.warning = function (currentFunction, logMessage)
        {
            createLog (currentFunction, logMessage, "Warning");
        }

        log.prototype.info = function (currentFunction, logMessage)
        {
            createLog (currentFunction, logMessage, "Info");
        }

        function createLog (currentFunction, logMessage, messageType)
        {
            //code that updates MSSQL database
        }
    }
4

4 に答える 4

4

クラスをまったく使用しておらず、最初に呼び出された関数logは、呼び出してもまったく役に立ちません。

あなたはそれを次のように書くことができました

var log = {}

log.error = function (currentFunction, logMessage){
    createLog (currentFunction, logMessage, "Error");
}

通常、新しい関数を作成し、それをクラスとして表示する場合は、次のようにします。

function log () {
}
log.prototype.error = function (currentFunction, logMessage) {
    createLog (currentFunction, logMessage, "Error");
}

そして、次のように使用できます。

(new log()).error("current function name", "this is my error message");

これは 2 番目の例に少し似ていますが、プロトタイプにアタッチしerrorたすべてのインスタンスで関数が共有される点が異なります。log

MDN には、javascript のオブジェクト モデルに関するドキュメントがあります

于 2013-01-21T16:17:05.250 に答える
0

これがそのログの「クラス」を整理する最良の方法だと思います。必要に応じて、警告機能と情報機能を実行できます。

var log = {
     error : function(currentFunction, logMessage) {
          createLog(currentFunction, logMessage, "Error");
     },
     warn : function() {

     },
     info : function() {

     }
}
于 2013-01-21T16:16:01.070 に答える
0

error() 関数が見つからない理由は、log オブジェクトのコンストラクター内にあるためです。log() 関数はコンストラクターです。これが、Javascript でプライベート メンバーを作成し、コンストラクターに配置する方法です。error() 関数を可視化するには、このようにログ オブジェクトのプロトタイプにアタッチする必要があります。

function log ()
{
    log.prototype.error = function (currentFunction, logMessage)
    {
        createLog (currentFunction, logMessage, "Error");
    }
}

これで、次のように呼び出すことができます。

var myLog = new log();
myLog.error("current function name", "this is my error message");

public、private、および保護されたメンバーを JavaScript で説明する優れた記事については、次の記事を参照してください: http://javascript.crockford.com/private.html

于 2013-01-21T16:22:19.867 に答える
0

次のように書くことができます。

var log = {
    error: function (currentFunction, logMessage) {
        createLog (currentFunction, logMessage, "Error");
    }
};

次に、次のように呼び出します。

log.error("My function", "Is not working");

私は通常、次の方法で jQuery を使用してこれを記述します。

(function($) {

    //Declare object
    var _this = $.Log = new function () {

    };

    //Apply variables and methods
    $.extend(_this, {
        error: function (currentFunction, logMessage) {
            createLog (currentFunction, logMessage, "Error");
        }
    });
)(jQuery);

これは後で次のように呼び出されます。

$.Log.error("My function", "Is not working");
于 2013-01-21T16:17:32.880 に答える