2012-08-09 3 views
6

Quindi vedo un sacco di codice JavaScript là fuori che utilizza "nuovo" quando si creano i costruttori. Dopo aver letto parte di JavaScript, Good Parts sembra che usare "new" non sia il pigiama del gatto. Questo è stato 4 anni fa però ... Non è ancora raccomandato? Qual è lo standard corrente?"nuovo" non è ancora raccomandato in JavaScript?

risposta

7

Da quando è new non consigliato? D. Crockford ha un punto valido e un parere forte, ma lo new è parte della lingua e viene utilizzato in molti progetti. new fa parte del modello di ereditarietà del prototipo e deve essere utilizzato per creare nuove istanze con una funzione di costruzione. Crockford sottolinea un approccio puramente funzionale utilizzando il contesto this in modo appropriato e return this per poter ereditare proprietà e metodi tra oggetti figlio. È una soluzione diversa a un problema comune, ma non significa che new non debba essere utilizzato. In effetti, una delle più copia/incollato frammenti JS di tutti i tempi è Crockford, il object.create polyfill, e utilizza new:

if (typeof Object.create !== 'function') { 
    Object.create = function (o) { 
     function F() {} 
     F.prototype = o; 
     return new F(); 
    }; 
} 
+0

Questo è vero! Bene nel suo libro cita "L'uso di questo stile di funzioni di costruzione non è raccomandato" (lo stile che usa nuovo). Quindi passa a descrivere altre soluzioni. Ecco perché ho sollevato la domanda. – Parris

+3

Non lo consiglia perché può portare a confusione in alcuni casi, ma ci sono altre pratiche comuni per evitare confusione come capitalizzare le funzioni del costruttore. Potresti dire la stessa cosa di Crockford che non consiglia di usare '++' e '--' ... – elclanrs

+0

Entrambe le quali penso siano utilizzabili ma ho smesso di usarle perché tutti quelli con cui lavoro decidevano di smettere di usare questi operatori. – Chris

2

Nulla è cambiato molto dal 2008 a parte il Crockford influenzato Object.create si fa strada in ECMAScript 5: new ha ancora lo stesso comportamento e gli stessi inconvenienti che Douglas Crockford ha sottolineato con forza. La mia opinione è che ha piuttosto sopravvalutato i problemi e ha trasformato gli sviluppatori contro un operatore utile, quindi continuo a usarlo senza problemi; Suggerirei che altri sviluppatori decidano la propria mente piuttosto che interiorizzare e rigurgitare ciecamente (ammettiamolo ammirabili) Crockford.

+0

Sono d'accordo. Penso che probabilmente avrebbe dovuto dire che dovremmo usarlo con la consapevolezza che ci sono degli inconvenienti ma è utilizzabile. – Chris