J'essaie de définir une valeur de variable au niveau d'un objet (classe) à partir de quelques niveaux d'appels de méthode javascript anonyme imbriqués. Comment puis-je faire cela?Fermetures de méthodes anonymes imbriquées en javascript
Voici un code pour expliquer ce que j'essaie de faire. Disclaimer: Je ne suis pas si à l'aise avec le concept des fermetures en javascript, donc je vais peut-être suivre un mauvais chemin ici. Toute suggestion concernant un moyen succinct de réaliser ce que je veux faire serait grandement appréciée.
// FileUtils object.
var FileUtils = function() {
// Member variables.
this.ConfRootDir = null;
};
// Method to get a file entry.
// successCallback has to be a method with a FileEntry object.
FileUtils.prototype.getFileEntry = function (fileName, successCallback) {
if (this.ConfRootDir == null) {
var thisObj = this;
// Request the root filesystem
// [** 1st callback, using anon method]
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0,
function (fileSystem) {
// Get the root directory of the file system.
var rootDir = fileSystem.root;
// Get the ConferenceToGo directory, or create if required.
// [** 2nd callback, using anon method]
rootDir.getDirectory("ConferenceToGo", { create: true, exclusive: false },
function (confDir) {
// Set values for future use
// [** Definitely wrong scoping. The class level variable
// can't be accessed using 'this'. What to do? **]
this.ConfRootDir = confDir;
// Now try getting the handle for the list file.
// [** 3rd callback, using anon method. Irrelevant at this point.]
this.ConfRootDir.getFile(fileName, { create: false },
successCallback, // Success callback [getFile]
function (error) {
logError("Unable to retrieve file: ", true, true, error);
}); // Failure callback [getFile]
}, // Success callback [getDirectory]
function (error) { logError("Unable to create new directory: ", true, true, error); }); // Failure callback [getDirectory]
}, // Success callback [requestFileSystem]
function (error) { logError("Problem reading file system: ", true, true, error); }
);
}
}
Je sais que la portée (en utilisant « ceci ») est tout faux dans la pièce au-dessus du code, mais ne savez pas comment faire les choses. J'ai vu quelques réponses sur la liaison au contexte (comme this one), mais j'utilise des méthodes anonymes, ce qui rend plus difficile. Note: Bien que je ne montre qu'une seule méthode dans le prototype de FileUtils ici, il y en a quelques autres. Ceux qui sont conscients peuvent probablement reconnaître que j'utilise des méthodes de la bibliothèque cordova (PhoneGap) pour le développement mobile multiplateforme en HTML5 et JS, mais ce n'est pas vraiment pertinent ici.
Vous pouvez utiliser 'thisObj' au lieu de' this' dans les fonctions imbriquées – Esailija
@Esailija: Merci .. essayait cela mais ne l'implémente pas complètement. –