0

ここでは、javascript でオブジェクトを構築しようとしています。しかし、次のようなランタイムエラーが発生しています:

TypeError: Cannot set property 'functWriteToLogFile' of undefined

次のように私のJavaScriptオブジェクト:

function SetAstAppLog(logFolderPath,fileNamePrefix,fileSize,logStreamObject) {
.
.
.
.
    this.functWriteToLogFile = function (fileNamePrefix, message) {
        console.log("functWriteToLogFile " + message);
        var currLogStreamObject =  initLogPath(fileNamePrefix);
        console.log("********************");
        console.log(fileNamePrefix);
        console.log(filePath);
        currLogStreamObject.write(message + '\n');
        this.emit('written');
    };

    initLogPath(fileNamePrefix);// Set log path on creation of new object.
    this.emit('objCreated');
}

私はfunctWriteToLogFile次のような他の機能にアクセスしたいです:

SetAstAppLog.prototype.funcLogErrors = function (fileNamePrefix,errLevel,err,req) {
   //make new json object here then call functWriteToLogFile
   this.functWriteToLogFile(fileNamePrefix, JSON.stringify(logErrorObj));
};


ここで自分の間違いを見つけることができません。

誰でもこの問題を解決するのを手伝ってもらえますか?

編集 :

私は次の方法でこの関数を呼び出しています:

var SetAstAppLog = require('astAppLog')();
var fileSize = 1024;


var objCommLogger = new SetAstAppLog(logFolderPath,logCommFilePrefix,fileSize,logCommMsg);
4

1 に答える 1

4

の場合thisundefined、「厳密モード」でなければなりません。厳密でない場合はthis、グローバル オブジェクトになり、エラー メッセージが表示されないため、役に立ちません。


関数内の の値はthis関数の呼び出し方法に基づいて定義され、関数のthisから継承した を参照するつもりであることは明らかであるため.prototype、 を使用して関数を呼び出す必要がありますnew

var o = new SetAstAppLog(...my args...);

このコード行があれば、すぐにモジュールを呼び出しています。

var SetAstAppLog = require('astAppLog')(); // <--invoking

require('astAppLog')これは、関数を返す関数を返す場合にのみ正しいでしょう。

最終的に使用したい関数を返すだけの場合は、末尾の括弧を削除する必要があります。

var SetAstAppLog = require('astAppLog'); // <-- assigned, not invoked
于 2013-11-05T16:12:36.183 に答える