javascript - 从另一个方法中运行私有(private)方法

标签 javascript cordova

我使用以下代码初始化类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/

相关文章:

javascript - 序列化多个重复项的数组

javascript - 我如何将每个人从某个角色转移到一个 channel

javascript 按钮 当选择某个值时,如何从所有按钮中删除一个类?

javascript - 试图在 Phonegap 中调用 navigator.accelerometer

android - 如何启动 Ionic 应用程序而不在 Web View 中打开它?

javascript - adobe acrobat 中模糊搜索字段

javascript - 在所有元素 jquery 数据表之上显示弹出窗口

android - phonegap 自动发送 GPS 位置到 Mysql 服务器。即使应用程序未打开

cordova - 如何在 firebase 中处理推送通知

javascript - AngularJs、Phonegap、路由器和 uiRouter