Javascript 从其他方法中运行私有方法
我使用以下代码初始化类Javascript 从其他方法中运行私有方法,javascript,cordova,Javascript,Cordova,我使用以下代码初始化类ReadConfig: var myReadConfig=new ReadConfig() 这可以正常工作,并显示警报(“2”) 之后,我运行语句window.requestFileSystem(…),它调用方法gotFSReader。 但是我从来没有看到警报(“3”)结果 如何在窗口外运行此方法gotFSReader。requestFileSystem(…)?如果我在课堂外运行它,它会完全工作 我的班级: var ReadConfig = function(){
ReadConfig
:
var myReadConfig=new ReadConfig()代码>
这可以正常工作,并显示警报(“2”)
之后,我运行语句window.requestFileSystem(…)
,它调用方法gotFSReader
。
但是我从来没有看到警报(“3”)代码>结果
如何在窗口外运行此方法gotFSReader
。requestFileSystem(…)
?如果我在课堂外运行它,它会完全工作
我的班级:
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”)。因此,您传递的是未定义的,而不是对函数的引用
在初始化之后,将窗口.requestFileSystem()调用移动到,或使用函数声明语句声明函数:
function gotFSReader(fileSystem) {
alert("3");
fileSystem.root.getFile(path, null, gotFileEntryReader, failReader);
}
如果您这样做,它就会工作,因为函数声明语句总是被视为出现在包含函数的开头
变量声明也被挂起,但有一点不同:只有var
语句的实际声明部分被视为发生在函数的开头。初始化在函数中实际出现var
的位置完成。因此,在代码中,名为“gotFSReader”的变量在调用requestFileSystem()
时声明,但尚未初始化。代码的结构不正确。在将值传递给该函数之前,不会初始化该变量(“gotFSReader”)。因此,您传递的是未定义的,而不是对函数的引用
在初始化之后,将窗口.requestFileSystem()调用移动到,或使用函数声明语句声明函数:
function gotFSReader(fileSystem) {
alert("3");
fileSystem.root.getFile(path, null, gotFileEntryReader, failReader);
}
如果您这样做,它就会工作,因为函数声明语句总是被视为出现在包含函数的开头
变量声明也被挂起,但有一点不同:只有var
语句的实际声明部分被视为发生在函数的开头。初始化在函数中实际出现var
的位置完成。因此,在代码中,名为“gotFSReader”的变量是在调用requestFileSystem()
时声明的,但它尚未初始化。如何修复它?我应该写:函数gotFSReader(fileSystem){…?它是面向对象的吗?如果使用函数声明语句,该函数将正常工作。如果出于某种原因不想这样做(在任何情况下它与“面向对象”无关),您可以将该调用移动到requestFileSystem()
到主函数的底部。如何修复它?我应该写:function gotFSReader(fileSystem){…?它是面向对象的吗?如果您使用函数声明语句,该函数将正常工作。如果您出于某种原因不想这样做(在任何情况下它与“面向对象”无关),您只需将对requestFileSystem()
的调用移动到主函数的底部即可。