2012-07-01 27 views
7

Utilizzare apparentemente la proprietà __proto__ è ancora il modo principale di manipolare le catene di prototipi, anche se questo non è conforme agli standard e IE non lo supporta. Sebbene sia possibile anche costruire l'ereditarietà tramite l'uso del costruttore new, questa sembra una complicazione inutile rispetto alla funzione __proto__ di proprietà o agli standard Object.getPrototypeOf.Perché non esiste Object.setPrototypeOf (...) nello standard ECMAScript?

Edit:

Come indicato nelle risposte, questo metodo esiste ora (standard ES6). Essere consapevoli del avviso di prestazioni, però: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf

+5

buone notizie. sembra Object.setPrototypeOf() ottenuto in ES6 http://webreflection.blogspot.pt/2013/05/objectsetprototypeofo-proto-is-in-es6.html – banzomaikaka

risposta

2

Brendan Eich dice questo here:

Object.setPrototypeOf non sta per accadere. Il __proto__ scrivibile è un dolore gigante da implementare (deve serializzare per controllare il ciclo) e crea tutti i tipi di rischi di confusione di tipo. Potresti pensare di volerlo come uno strumento nitido a basso livello . JS non è quella lingua. I moduli di livello superiore per le classi e i mixin sembrano molto migliori e non comportano tali spigoli vivi dello .

+0

Grazie per la risposta, anche se devo ammettere che non lo faccio capisci perfettamente La tua idea è di aggiungere ereditarietà non prototipale in Javascript? Nella mia mente, Object.setPrototypeOf creerebbe semplicemente un riferimento all'oggetto prototipo, quindi non capisco come ciò richiederebbe la serializzazione. – JussiR

+6

Sembra come se fosse sbagliato :) appena arrivato in Chrome: https://code.google.com/p/v8/source/detail?r=18685 e, è sperimentale in Firefox già: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf – lucasarruda

+0

@Esailija Qual è la tua opinione su questo nel 2017? Sembri diventare "serio" quando si tratta di prestazioni e ottimizzazione (in libs scrivi/contribuisci) quindi mi piacerebbe sapere cosa ne pensi. –