2014-11-21 8 views
9

Il following answer to this question fa un ottimo lavoro spiegando le differenze tra classical inheritance e prototypal inheritance. questo mi interessava capire perché ho iniziato a lavorare in Java, ma mi sono trasferito su Javascript.uso classe in un linguaggio basato sull'eredità prototipo

Nella sua risposta, afferma per prototypal inheritance che "Tutto il business delle lezioni va via. Se vuoi un oggetto, scrivi semplicemente un oggetto".

Eppure c'è tanta documentazione e questions su come "scrivere classi" in Javascript.

Perché c'è una spinta a rendere il linguaggio qualcosa che non è. Sto cercando esempi concreti di casi in cui l'utilizzo di classi nelle applicazioni JS è più sensato in questo linguaggio prototipale e i vantaggi di montare goffamente un piolo quadrato in un buco rotondo. Come dice Aravind, perché la gente sta imparando Javascript confrontandolo con gli altri, e non come era previsto ... e perché questa pratica sembra essere incoraggiata?

Domanda in basso: Perché le classi vengono introdotte in ECMAScript 6?

+1

La mia domanda precisa. – Aravind

+0

La risposta è molto semplice. C'è un bisogno (la regola della domanda e dell'offerta). Perché c'è bisogno? IMHO perché l'eredità prototipale non è naturale. Ad ogni modo è una domanda basata principalmente sulle opinioni e non si adatta a SO. – freakish

+1

@Growler: Anche se mi sentivo come se le persone spesso cercassero di imparare il Javascript confrontandolo con lingue che già conoscono (C++, Java), perché non possiamo semplicemente imparare questo come linguaggio autonomo? – Aravind

risposta

6

Le masse come le classi.

Non c'è niente di "più" o di "meno" naturale nell'ereditarietà prototipale, questo è del tutto soggettivo. JS è la sua lingua, proprio come Smalltalk e Self avevano idee diverse su cosa significasse essere un oggetto.

Le classi ES6 sono zucchero sintattico. Normalizzano/puliscono come l'ereditarietà/ecc deve essere utilizzata in JS.

Analogamente a CoffeeScript, tentano di standardizzare il modo in cui OOP viene eseguito in JS e di renderlo più familiare alle persone che non sono abituate all'ereditarietà prototipale.

+1

Quindi stai dicendo, perché le classi sono popolari vengono introdotte? E che Javascript non ne ha realmente bisogno? Viene introdotto proprio come mezzo per coinvolgere più persone nell'uso di Javascript? – Aravind

+4

@Aravind corretto, JS non ha * bisogno * di classi (come implementato in ES6). Non credo che sia stato introdotto "proprio come un modo per attirare più persone per usare JS" - tutti lo usano già. –

+1

Basta leggere l'articolo di Zakas, in cui spiega che si tratta solo di zucchero sintattico. – Aravind

2

Perché le classi vengono introdotte in ES6? Zucchero, della varietà sintattica.

4

Ho trovato this article di Zakas spiegando chiaramente che si tratta solo di zucchero sintattico, e alla fine della giornata Javascript funzionerà allo stesso modo.

Non preoccuparti di dover imparare le lezioni o dover spostare gli stili di programmazione, non cambia nulla. :)

5

Perché le persone imparano Javascript confrontandolo con altri, e non con lo come previsto?

Questo entra nel cognitive and learning theory, ma la versione breve è che gli esseri umani come le cose che ci sono familiari, e uno dei modi che impariamo è mettendo in relazione le nuove idee alle conoscenze che già abbiamo.

Perché le classi vengono introdotte in ECMAScript 6?

Classi erano almost introduced in ECMAScript 4, in realtà. Penso che ci siano buoni argomenti perché OOP sia un modello utile per scrivere software complessi e l'ereditarietà basata su classi è più familiare a molti programmatori di quanto non sia l'ereditarietà basata su prototipi. Penso che una domanda altrettanto valida potrebbe essere "perché JavaScript implementa ancora l'ereditarietà basata su prototipi quando la maggior parte delle persone che lo apprendono sarà più a suo agio con l'ereditarietà basata sulla classe?"

Se siete curiosi di quali classi in JavaScript potrebbe sembrare, dare un'occhiata a ActionScript 3, which is based on that draft of EMCAScript 4 con l'ereditarietà base di classe.

Naturalmente, solo perché ECMAScript aggiunge il supporto di classe does not mean that JavaScript will, o almeno quella it will any time soon .

1

le classi sono molto buono per le persone che vengono a JavaScript da linguaggi orientati agli oggetti (come Java).

Questa è l'esperienza che ho fatto già diverse volte. ho avuto un certo numero di progetti J2EE web con buon Java team di sviluppo, che avevano una conoscenza di JavaScript, ma non molto. Quasi la prima cosa che ho fatto è stata spiegare i prototipi, l'ereditarietà prototipale e come si può implementare il paradigma OOP usando i prototipi - fondamentalmente l'ereditarietà pseudoclassica. (Ora eseguo abitualmente un seminario "JavaScript per sviluppatori Java" quasi in ogni progetto di questo tipo.)

Con questo approccio ho visto soprattutto un buon codice in uscita. La maggior parte degli sviluppatori Java tende ad attenersi al modello pseudoclassico e ne sono abbastanza contenti. Questo è molto probabilmente non quello che JS ninja avrebbe scritto, ma, francamente, non mi interessa. Il codice è facile da capire e da mantenere, le persone hanno avuto una buona curva di apprendimento e sono state produttive molto velocemente.

0

I linguaggi di prototipo, come JavaScript, sono davvero grandiosi per progetti su piccola scala ea breve termine che non richiedono molti test o manutenzione. La loro funzionalità semplice e flessibile brilla davvero in questo regno.

Le lingue basate sulle classi tendono invece ad essere un po 'più rigide e richiedono più impostazioni, il che non è eccezionale per le piccole cose, ma la struttura aggiuntiva è utile per mantenere scalabili e gestibili i progetti più grandi a lungo termine .

Quando JavaScript è stato avviato, la sua funzione principale era quella di manipolare elementi DOM statici, che è un'ottima applicazione per un linguaggio prototipo. Veloce, flessibile e semplice, senza complicazioni. Ora, tuttavia, il ruolo che riempie JavaScript è molto più complesso ed è sempre più un'applicazione che un semplice script. Aggiungere classi a un linguaggio prototipo sembra un po 'strano, ma le classi di struttura aggiunte forniscono, insieme alla loro diffusa familiarità, potrebbero facilmente aiutare i team di sviluppatori a gestire la complessità delle moderne applicazioni JavaScript.

Problemi correlati