In a recent comment on one of my patches, Mark made what I thought was a clever suggestion for how to do lazy initialization of a value via a js getter:
>+ /// The user's profile dir, which we'll cache and use a lot for path clean-up >+ _profileDir: null, >+ >+ /// Spotlight won't index files in the profile dir, but will use ~/Library/Caches/Metadata >+ _getSearchPathForFolder: function spotlight_get_search_path(aFolder) >+ { >+ if (!this._profileDir) >+ this._profileDir = Cc["@mozilla.org/file/directory_service;1"] >+ .getService(Ci.nsIProperties) >+ .get("ProfD", Ci.nsIFile);
Why not store just the path of the profile directory?
Also, if you want to cache this value, but don't want to init it until first
use, you can do:
get _profileDir() { delete this._profileDir; return this._profileDir = Cc["@mozilla.org/file/directory_service;1"] .getService(Ci.nsIProperties) .get("ProfD", Ci.nsIFile); }
Probably something very common to others and I'm just seeing for the first time, but I like it!