Come mai javascript, essendo un linguaggio basato su prototipi, non ha un modo semplice per accedere al prototipo?

6

Può essere una domanda stupida, ma sono un po 'incuriosito.

Essere JavaScript un linguaggio basato su prototipi, con i suoi costruttori di funzioni pseudo-classe un po 'cotti (ricorda JavaScript: Le buone parti ...) Mi chiedo come sia possibile che non avesse, fin dall'inizio, un modo semplice per accedere al prototipo di ciascun oggetto.

Per modo semplice intendo qualcosa come object.prototype o object._prototype (e non il proto sporco)

Per quello che so, l'Object.getPrototypeOf (obj) è stato appena aggiunto alla fine del 2008, quasi 13 anni dopo il lancio di JavaScript.

Te lo chiedo perché mi sono sempre chiesto se JavaScript fosse mai stato concepito come un puro linguaggio basato su prototipi, voglio dire, senza usare alcuna funzione per costruire oggetti (in altre parole, non usare mai il nuovo operatore).

    
posta opensas 13.06.2013 - 04:22
fonte

2 risposte

9

Cerca Object.create per un'alternativa ai costruttori di funzioni che trovo davvero molto utili dal momento che ti forniscono vars per istanze incapsulate tramite chiusura.

Non sono sicuro per quanto tempo è stato disponibile, ma ho utilizzato < object > .constructor.prototype per un po 'di tempo.

Ma in realtà, JS è stato scritto in 10 giorni. Da quel momento è passato da quel lavoro di fretta. Non sono nemmeno sicuro che avessero un prototipo sui costruttori di funzioni quando è stato rilasciato per la prima volta. Il top ottone di Netscape voleva che assomigliasse a Java. Brendan Eich voleva che funzionasse come Scheme (e ha deciso che lo faceva sembrare C piuttosto che Java, con il quale presumo che affermasse di non essere un grande fan nemmeno allora).

Inoltre, Good Parts è una lettura decente, ma non è l'autorità suprema e Crockford ha alcuni aspetti davvero strani della lingua. In particolare i costruttori di funzioni che ha affermato sono cattivi perché potresti dimenticarti di usare una nuova parola chiave e rovinare. Beh, potresti dimenticarti di indossare i pantaloni anche al mattino, ma tendi a notare piuttosto rapidamente.

Ci sono voluti un po 'per trovarlo ma se vuoi davvero sapere come è successo, è meglio andare alla bocca del cavallo:

link

    
risposta data 13.06.2013 - 06:17
fonte
0

Questa è davvero una domanda su ciò che ha attraversato la mente di Eich quando ha progettato la lingua, quindi è solo lui che può rispondere.

Ma se dovessi azzardare un'ipotesi, direi che la versione iniziale di JavaScript era un prototipo veloce e sporco e si aspettava di riuscire a appianare incongruenze e funzionalità mancanti nelle versioni successive. Ma poi è stato rapidamente decodificato con la compatibilità bug-for-bug di Microsoft e poi standardizzato, che improvvisamente ha congelato la lingua prima del previsto.

Sono abbastanza sicuro che si pensava che le istanze dovessero essere create con 'nuovo' come in Java, ed era più un dettaglio di implementazione "sotto il cofano" che l'ereditarietà avveniva attraverso i prototipi. Le parole chiave "extends" e "implements" erano riservate fin dall'inizio, il che suggerisce che il linguaggio avrebbe dovuto sviluppare una sintassi più java per l'ereditarietà. Ma fino ad allora, dovevi usare direttamente i prototipi per usare l'ereditarietà.

Quindi la situazione attuale è un po 'cotta e non è il risultato di una deliberata decisione di progettazione.

    
risposta data 28.03.2015 - 12:29
fonte

Leggi altre domande sui tag