Ich bin ein ziemlich erfahrener Programmierer in den Bereichen .NET und Java und habe angefangen, mich mit JavaScript zu beschäftigen. Ich habe Douglas Crockfords "The Good Parts" -Buch gekauft und bin sofort von ein paar Dingen abgeschreckt.
Eine besteht darin, die grundlegenden Typen ohne Notwendigkeit zu modifizieren:
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);
Natürlich ist das Erstellen einer Funktion mit diesem Zweck nützlich und spart Zeit, aber WARUM AUF ERDE empfiehlt er, sie auf Objekt zu erstellen? Vor drei Atemzügen trat er dafür ein, dass Globale böse sind, und ging dann zum Affen-Patch-Objekt über. Er testet sogar, ob es bereits existiert, und geht nur davon aus, dass die Implementierung dieselbe ist, wenn eine andere Bibliothek dies für ihn getan hat.
Gibt es einen Grund, dies nicht im JS-Äquivalent eines Namespace zu erstellen? dh
MY_UNIQUE_UTIL_LIBRARY.create = function(obj){...}; //The name would be shorter in reality.
Versteh mich nicht falsch, ich denke, das Patchen von Affen ist nützlich, aber es ist etwas, was du tust, wenn es einen inhärenten Vorteil gibt. Ich sehe hier keinen? Ist dort eines?
Antworten:
Object.create
wird in neueren Versionen von Browsern definiert (kann nicht genau sagen, wann). Sie können die Beschreibung im Mozilla-Entwicklernetzwerk sehen .Dies ist nur eine Polyfüllung (ähnlich der auf dieser Seite, mit ein paar weniger Überprüfungen), um dieselbe Funktion in älteren Browsern verwenden zu können. In neueren Browsern ist es bereits als Funktion definiert und verwendet daher die browseroptimierte Version, während es in älteren Browsern standardmäßig undefiniert ist und diese Version verwendet.
quelle
Object.create
älter als ES5, daher ist diese Antwort chronologisch falsch.beget
und er definierte es in welchem Umfang auch immer er sich befand und nichtObject
- also ist diese Antwort nicht wirklich chronologisch falsch.