Il mio collega ha utilizzato "nuova funzione()" con una minuscola "f" per definire nuovi oggetti in JavaScript. Sembra funzionare bene in tutti i principali browser e sembra anche essere abbastanza efficace nel nascondere variabili private. Ecco un esempio:`nuova funzione()` con minuscolo "f" in JavaScript
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 "questo" viene utilizzato, diventa una proprietà pubblica di alcuniObj. 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" attraverso le chiusure.
Tuttavia, non ho visto alcun riferimento a questa tecnica da nessuna parte. JSLint di Anche Douglas Crockford lamenta:
- costruzione strano. Elimina 'nuovo'
Stiamo utilizzando questa tecnica nella produzione e sembra funzionare bene, ma io sono un po 'ansioso su di esso perché non è documentato da nessuna parte. Qualcuno sa se questa è una tecnica valida?
Preferisco il tuo costrutto rispetto all'IIFE ('Funzione richiamata immediatamente'). 1: Non hai bisogno di un esplicito oggetto "istanza", questo è esattamente ciò che "questo" è in JavaScript. 2: Non è necessario restituire nulla, il che significa che non è necessario ricordarsi di farlo. Persino l'autore della risposta accettata ha dimenticato di restituire inizialmente l'oggetto istanza! Le persone di solito preferiscono usare un IIFE se odiano di nuovo e questo, con buone ragioni - Se hai una funzione che gestisce un evento DOM, questo si riferirà all'elemento che ha generato l'evento, non al tuo oggetto, ma potresti semplicemente avere 'var instance = this' invece. –
Perché è importante per la domanda specificare "minuscolo f"? – ClearCloud8
Perché in Javascript esiste anche la funzione 'Funzione' (con F maiuscola), che è diversa: __Function__ è una funzione di costruzione che può creare nuovi oggetti funzione, mentre __function__ è una parola chiave. –