如何在Javascript中使对象成为全局对象?

如何在Javascript中使对象成为全局对象?,javascript,android,cordova,Javascript,Android,Cordova,我制作了一个小的phonegap/cordova应用程序,需要访问.js文件中的一个对象。事实证明,我不知道如何改变代码的结构来实现这一点 以下是我的index.html代码: <!DOCTYPE html> <html> <head> <title>NFC tag ID reader</title> <script type="text/javascript" src="js/index.

我制作了一个小的phonegap/cordova应用程序,需要访问.js文件中的一个对象。事实证明,我不知道如何改变代码的结构来实现这一点

以下是我的index.html代码:

<!DOCTYPE html>
<html>
    <head>
        <title>NFC tag ID reader</title>
        <script type="text/javascript" src="js/index.js"></script>
        <script type="text/javascript" charset="utf-8">
            // Wait for device API libraries to load
            document.addEventListener("deviceready", onDeviceReady, false);

            // device APIs are available
            function onDeviceReady() {
                window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
            }
            function gotFS(fileSystem) {
                fileSystem.root.getFile("readme.txt", {create: true, exclusive: false}, gotFileEntry, fail);
            }
            function gotFileEntry(fileEntry) {
                fileEntry.createWriter(gotFileWriter, fail);
            }

            function gotFileWriter(writer) {
                writer.onwriteend = function(evt) {
                    console.log("contents of file now 'some sample text'");
                    writer.truncate(11);
                    writer.onwriteend = function(evt) {
                        console.log("contents of file now 'some sample'");
                        writer.seek(4);
                        writer.write(" different text");
                        writer.onwriteend = function(evt){
                            console.log("contents of file now 'some different text'");
                        }
                    };
                };
                writer.write("some sample text");
                //MAKE THIS OBJECT GLOBAL ?
            }

            function fail(error) {
                console.log(error.code);
            }
        </script>
    </head>
    <body>
        <div class="app">
        <script type="text/javascript">
            app.initialize();
        </script>
    </body>
</html>

NFC标签ID读取器
//等待加载设备API库
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
//设备API可用
函数ondevicerady(){
requestFileSystem(LocalFileSystem.PERSISTENT,0,gotFS,fail);
}
函数gotFS(文件系统){
getFile(“readme.txt”,{create:true,exclusive:false},gotFileEntry,fail);
}
函数gotFileEntry(fileEntry){
createWriter(gotFileWriter,失败);
}
函数gotFileWriter(writer){
writer.onwriteend=函数(evt){
log(“文件内容现在是‘一些示例文本’”);
writer.truncate(11);
writer.onwriteend=函数(evt){
log(“文件内容现在是‘一些示例’”);
作者:seek(4);
写(“不同的文本”);
writer.onwriteend=函数(evt){
log(“文件内容现在是‘一些不同的文本’”);
}
};
};
writer.write(“一些示例文本”);
//将此对象设置为全局对象?
}
功能失败(错误){
console.log(错误代码);
}
app.initialize();
下面是我的index.js代码:

var app = {
    /* Application constructor */
    initialize: function() {
        this.bindEvents();
        console.log("Starting NFC Reader app");
    },
    /* bind any events that are required on startup to listeners: */
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    /* this runs when the device is ready for user interaction: */
    onDeviceReady: function() {
        nfc.addTagDiscoveredListener(
            app.onNfc,             // tag successfully scanned
            function (status) {    // listener successfully initialized
                app.displayCpt("<b>"+cpt+"</b>" + ' personnes restantes.');
                app.displayBjr("\n");
                app.displayBjr("Identifiez-vous:");
            },
            function (error) {     // listener fails to initialize
                app.display("NFC reader failed to initialize " +
                JSON.stringify(error));
            }
        );
    },
    /* displays tag ID from @nfcEvent in message div: */

    onNfc: function(nfcEvent) {
    var tag = nfcEvent.tag;
    var nfcUid = nfc.bytesToHexString(tag.id);
    var myDb = {
        "04c85ccab52880": {
            "name": "name",
            "firstname": "fname",
            "societe": "work"
        }
        var mapped = Object.keys(myDb).map(function(uid){
            return (myDb[uid].uid = uid) && myDb[uid];
        });

        for(var i = 0; i < mapped.length ; i++){
            if(mapped[i]['uid'] != nfcUid){
                mapped[i]['uid'] += 1;
            } else {
                mapped[i]['uid'] = nfcUid;
                app.display(mapped[i]['name'] + ' ' + mapped[i]['firstname'] + ', ' + mapped[i]['societe']);
                writer.write(mapped[i]['name'] + ' ' + mapped[i]['firstname'] + ', ' + mapped[i]['societe']);
                //I WOULD NEED THIS WRITER USABLE IN ORDER TO WRITE MY ARRAY CONTENT INTO A FILE
            }
        }

    },

};     // end of app
var-app={
/*应用程序构造函数*/
初始化:函数(){
这是bindEvents();
console.log(“启动NFC阅读器应用程序”);
},
/*将启动时所需的任何事件绑定到侦听器:*/
bindEvents:function(){
文件.addEventListener('devicerady',this.ondevicerady,false);
},
/*当设备准备好进行用户交互时,此操作将运行:*/
ondevicerady:function(){
nfc.addTagDiscoveredListener(
app.onNfc,//已成功扫描标记
函数(状态){//侦听器已成功初始化
app.displayCpt(“+cpt+”+“人员餐厅”);
app.displayBjr(“\n”);
app.displayBjr(“identiez-vous:”);
},
函数(错误){//侦听器无法初始化
应用程序显示(“NFC读卡器初始化失败”+
stringify(错误));
}
);
},
/*在消息div中显示@nfcEvent中的标记ID:*/
onNfc:函数(nfcEvent){
var tag=nfcEvent.tag;
var nfcUid=nfc.bytesToHexString(tag.id);
var myDb={
“04c85ccab52880”:{
“名称”:“名称”,
“firstname”:“fname”,
“兴业银行”:“工作”
}
var mapped=Object.keys(myDb).map(函数(uid){
返回(myDb[uid].uid=uid)&&myDb[uid];
});
对于(变量i=0;i
我认为我的
writer
对象需要是全局的,以便将映射数组写入文件,但我找不到这样做的方法。有什么想法吗


谢谢

您是否尝试过将
var writer
置于一切之外,并将其从
gotFileWriter(writer)的参数列表中删除
?这应该使它成为一个全局变量。请注意,这并不是最好的编程实践,应该尽可能避免使用全局变量。

嗨,瑞文,你在说什么
var-writer
?我的代码中到目前为止没有任何
var-writer
,这就是为什么我不能把它放在代码之外的原因…@FlorentP No、 您需要做的是在任何函数或对象之外创建一个
var writer
(我建议在
document.addEventListener(“devicerady”,ondevicerady,false);
),然后将
gotFileWriter(writer)
转换为
gotFileWriter()
。这将把
writer
变量变成一个全局对象。这会使
writer
在我的.js文件中可用吗?如果在其他脚本之后包含.js文件,应该这样做。如果你不想移动.js文件,你可以将
var writer
放在它的开头。Arf..我试着这样做,b但它似乎不起作用。