Javascript 获取错误“;TypeError:无法读取属性';doFileHasCorrectFileExtension';“未定义”的定义;从ES6类方法
我遇到了一个问题,其中出现了错误Javascript 获取错误“;TypeError:无法读取属性';doFileHasCorrectFileExtension';“未定义”的定义;从ES6类方法,javascript,node.js,typescript,class,ecmascript-6,Javascript,Node.js,Typescript,Class,Ecmascript 6,我遇到了一个问题,其中出现了错误TypeError:无法读取未定义的属性“doFileHasCorrectFileExtension” 当我创建文件或文件夹时。我希望我的应用程序能够使用 方法doFileHasCorrectFileExtension没有未定义 为了解决我的问题,我创建了一个保存对象的变量 由类创建 const textFileWatcher=new FileExtensionMatcher(“文本文件”[ “txt”, ]); 我解决这个问题的第二次尝试是设置watcher变
TypeError:无法读取未定义的属性“doFileHasCorrectFileExtension”
当我创建文件或文件夹时。我希望我的应用程序能够使用
方法doFileHasCorrectFileExtension
没有未定义
为了解决我的问题,我创建了一个保存对象的变量
由类创建
const textFileWatcher=new FileExtensionMatcher(“文本文件”[
“txt”,
]);
我解决这个问题的第二次尝试是设置watcher变量
(textFileWatcher
在上一次尝试中)在全局对象中,因此它不会
把垃圾收集起来
const-watchers:FileExtensionMatcher[]=[];
观察者,推(
新的FileExtensionMatcher(“文本文件”[
“txt”,
])
);
//@类型脚本忽略
global.fileWatcher=观察者;
此外,为了诊断问题,我启动了脚本上的调试器并
我意识到,这个
在方法onFilesChanged
中没有定义
以下是我收到的完整错误消息:
PS C:\Users\ASD\Project\js\download-sort> typescript-node .\source\
Debugger attached.
[16:13:32] Started listening file watcher for Text files
[16:13:46] New Text Document (2).txt has been created at C:\Users\ASD\Downloads.
TypeError: Cannot read property 'doFileHasCorrectFileExtension' of undefined
at C:\Users\ASD\Project\js\download-sort\source\FileExtensionMatcher.typescript:8:71
at new Promise (<anonymous>)
at __awaiter (C:\Users\ASD\Project\js\download-sort\source\FileExtensionMatcher.typescript:4:12)
at C:\Users\ASD\Project\js\download-sort\source\FileExtensionMatcher.typescript:45:56
at Array.forEach (<anonymous>)
at onFilesChanged (C:\Users\ASD\Project\js\download-sort\source\FileExtensionMatcher.typescript:45:11)
您正在丢失正确的
this
,将其传递到nsfw
-使用this.onFilesChanged.bind(this)
我通过将函数nsfw
的第二个参数更改为(filesChanged)=>this.onFilesChanged(filesChanged)
解决了我的问题。下面是它在我的代码中的外观:
构造函数(名称:string,扩展名:string[]
{
this.Name=Name;
nsfw(“C:/Users/ASD/Downloads”,(filechanged)=>this.onFilesChanged(filechanged),{errorCallback:log.error})。然后((fileWatcher)=>
{
fileWatcher.start()。然后(()=>log(“开始侦听“+this.Name”的文件查看器));
});
this.onFilesChanged=this.onFilesChanged.bind(this);
extension.forEach((extension)=>this.extensions=extension);
}
问题是onFileChanged方法无法访问类环境,因为它绑定到nsfw
函数对象。做我的修理工作,因为它
s是绑定到nsfw对象的箭头函数环境,而不是方法环境。我仍然有错误。这是我的代码:我做错什么了吗?@ViniDalvino看看你的第二个参数,这就是正在发生的事情,而不是在另一个函数中