Perché creare una funzione Object.create globale?

8

Sono un programmatore abbastanza esperto nei domini .NET e Java e ho iniziato a leggere su JavaScript. Ho comprato il libro "The Good Parts" di Douglas Crockford, e sono subito scoraggiato da alcune cose.

Uno sta modificando i tipi fondamentali senza bisogno:

if (typeof Object.create !== 'function') {
    Object.create = function (o) { //Really... 'o'? For a parameter you're only using twice?
        function F() {}
        F.prototype = o;
        return new F();
    };
}
newObject = Object.create(oldObject);

Ovviamente la creazione di una funzione con questo scopo è utile e consente di risparmiare tempo, ma PERCHÉ SULLA TERRA si consiglia di crearlo su Object? Tre respiri fa si è sposato che i globali sono malvagi, e poi ha proceduto alla scimmia patch Object. Verifica anche se esiste già, e presume solo che se qualche altra libreria l'ha fatto per lui l'implementazione è la stessa.

C'è qualche ragione per non crearlo nell'equivalente JS di uno spazio dei nomi? vale a dire

MY_UNIQUE_UTIL_LIBRARY.create = function(obj){...}; //The name would be shorter in reality.

Non fraintendermi, penso che la patch per scimmia sia utile, ma è qualcosa che fai quando c'è un vantaggio intrinseco. Non ne vedo uno qui? Ce n'è uno?

    
posta Casey 10.05.2015 - 06:01
fonte

1 risposta

8

Object.create è definito nelle versioni più recenti dei browser (non posso dire esattamente da quando). Puoi vedere la sua descrizione nella rete di sviluppatori Mozilla .

Questo è solo un polyfill (abbastanza simile a quello in quella pagina, con alcuni controlli in meno) per poter usare la stessa funzione sui browser più vecchi. Sul browser più recente è già definito come una funzione e quindi utilizzerà la versione ottimizzata del browser, mentre nei browser più vecchi è di default non definito e utilizzerà questa versione.

    
risposta data 10.05.2015 - 10:51
fonte

Leggi altre domande sui tag