我使用以下代码初始化类ReadConfig
:
var myReadConfig = new ReadConfig();
这工作正常,alert("2")
出现。
之后,我运行语句window.requestFileSystem(...)
,该语句调用方法gotFSReader
。
但我从未看到 alert("3");
结果。
我应该如何在 window.requestFileSystem(...)
之外运行此方法 gotFSReader
?如果我在类(class)之外运行它,它完全可以工作......
我的类(class):
var ReadConfig = function(){
var path = "Zugangsdaten.txt";
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFSReader, failReader);
alert("2");
var gotFSReader = function(fileSystem) {
alert("3");
fileSystem.root.getFile(path, null, gotFileEntryReader, failReader);
}
var gotFileEntryReader = function(fileEntry) {
fileEntry.file(gotFileReader, failReader);
alert("4");
}
var gotFileReader = function(file){
readAsText(file);
}
var readAsText = function(file) {
var reader = new FileReader();
reader.onloadend = function(evt) {
console.log("Read as text");
handleLocalPasswort(evt.target.result);
};
reader.readAsText(file);
}
var failReader = function(evt) {
console.log(evt.target.error.code);
}
var handleLocalPasswort = function(fileStr){
if(fileStr=="" || fileStr == null){
return;
}
var arrayItems = fileStr.split(";");
document.getElementById('tb_benutzer').value = arrayItems[0];
document.getElementById('tb_password').value = arrayItems[1];
document.getElementById('tb_knr').value = arrayItems[2];
checkLogin();
}
}
最佳答案
您的代码结构不正确。在将值传递给该函数之前,您不会初始化该变量(“gotFSReader”)。因此,您传递的是 undefined
,而不是对该函数的引用。
将 window.requestFileSystem()
调用移至初始化之后,或使用函数声明语句声明您的函数:
function gotFSReader(fileSystem) {
alert("3");
fileSystem.root.getFile(path, null, gotFileEntryReader, failReader);
}
如果您这样做,那么它就会起作用,因为函数声明语句始终被视为出现在包含函数的开头。
变量声明也会被提升,但有一个区别:只有 var
语句的实际声明部分被视为出现在函数的开头。初始化是在函数中 var
实际出现的位置完成的。因此,在您的代码中,名为“gotFSReader”的变量在您调用 requestFileSystem()
时声明,但尚未初始化。
关于javascript - 从另一个方法中运行私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18619500/