如何在Javascript中使对象成为全局对象?
我制作了一个小的phonegap/cordova应用程序,需要访问.js文件中的一个对象。事实证明,我不知道如何改变代码的结构来实现这一点 以下是我的index.html代码:如何在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.
<!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但它似乎不起作用。