Il mio collega ha utilizzato "new function ()" con una "f" minuscola per definire nuovi oggetti in JavaScript. Sembra funzionare bene in tutti i principali browser e sembra anche essere abbastanza efficace nel nascondere le variabili private. Ecco un esempio:
var someObj = new function () {
var inner = 'some value';
this.foo = 'blah';
this.get_inner = function () {
return inner;
};
this.set_inner = function (s) {
inner = s;
};
};
Non appena "this" viene utilizzato, diventa una proprietà pubblica di someObj. Quindi someObj.foo, someObj.get_inner () e someObj.set_inner () sono tutti disponibili pubblicamente. Inoltre, set_inner () e get_inner () sono metodi privilegiati, quindi hanno accesso a "inner" tramite chiusure.
Tuttavia, non ho visto alcun riferimento a questa tecnica da nessuna parte. Anche JSLint di Douglas Crockford se ne lamenta:
- strana costruzione. Elimina "nuovo"
Stiamo usando questa tecnica in produzione e sembra funzionare bene, ma sono un po 'in ansia perché non è documentata da nessuna parte. Qualcuno sa se questa è una tecnica valida?
this
si riferirà all'elemento che ha generato l'evento, non al tuo oggetto, ma potresti semplicemente averevar instance = this
invece.