Javascript TypeError:无法设置属性<;功能>;未定义的
在这里,我试图用javascript构建对象。 但我得到的运行时错误如下:Javascript TypeError:无法设置属性<;功能>;未定义的,javascript,node.js,prototype,Javascript,Node.js,Prototype,在这里,我试图用javascript构建对象。 但我得到的运行时错误如下: TypeError: Cannot set property 'functWriteToLogFile' of undefined 我的javascript对象如下所示: function SetAstAppLog(logFolderPath,fileNamePrefix,fileSize,logStreamObject) { . . . . this.functWriteToLogFile = functio
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);
如果
此
未定义,则必须处于“严格模式”。如果您没有严格要求,那么这个
将是全局对象,并且您不会收到错误消息,这不会有帮助
因为函数中的
this
的值是根据调用函数的方式定义的,而且很明显,您希望this
引用从函数的.prototype
继承的,所以应该使用new
调用函数
var o = new SetAstAppLog(...my args...);
给定这行代码,您将立即调用模块
var SetAstAppLog = require('astAppLog')(); // <--invoking
如果
此
未定义,则必须处于“严格模式”。如果您没有严格要求,那么这个
将是全局对象,并且您不会收到错误消息,这不会有帮助
因为函数中的
this
的值是根据调用函数的方式定义的,而且很明显,您希望this
引用从函数的.prototype
继承的,所以应该使用new
调用函数
var o = new SetAstAppLog(...my args...);
给定这行代码,您将立即调用模块
var SetAstAppLog = require('astAppLog')(); // <--invoking
你能把你所有的代码都显示出来吗?这很奇怪。这和你的另一个问题是同一个问题。如果你在那里收到的答案不起作用,不要接受。也就是说,你最初对这个问题的回答是错误的,但现在已经被纠正了。这里的问题是您使用的答案不正确。请显示实际使用“funcLogErrors”函数的代码。您能以小提琴的形式显示所有代码吗?这很奇怪。这和你的另一个问题是同一个问题。如果你在那里收到的答案不起作用,不要接受。也就是说,你最初对这个问题的回答是错误的,但现在已经被纠正了。这里的问题是您使用的答案不正确。请显示实际使用“funcLogErrors”函数的代码。请查找我更新的问题。这里我使用new关键字调用函数。@user2625690:您遗漏了一些内容。如果您使用
new
,则this
的值将不会未定义
@user2625690:不知道模块的结构,我所能确定的是有限的。但由于某些原因,您正在立即调用该模块<代码>var SetAstAppLog=require('astAppLog')()代码>为什么你有最后的帕伦?如果模块返回一个函数,这将调用它,并给出错误,假设这是您想要的构造函数func。如果不需要调用尾随参数,请删除它var SetAstAppLog=require('astAppLog')/*此处无参数*/代码>请找到我更新的问题。这里我使用new关键字调用函数。@user2625690:您遗漏了一些内容。如果您使用new
,则this
的值将不会未定义
@user2625690:不知道模块的结构,我所能确定的是有限的。但由于某些原因,您正在立即调用该模块<代码>var SetAstAppLog=require('astAppLog')()代码>为什么你有最后的帕伦?如果模块返回一个函数,这将调用它,并给出错误,假设这是您想要的构造函数func。如果不需要调用尾随参数,请删除它var SetAstAppLog=require('astAppLog')/*此处无参数*/代码>