Podobne do, ale różne od this question. Poniższy kod pochodzi z JavaScript: The Definitive Guide. Zasadniczo definiuje metodę dziedziczenia, która odwołuje się do Object.create, jeśli istnieje, w przeciwnym razie robi zwykłe stare dziedzictwo JavaScript, używając konstruktorów i zamieniając prototypy wokół.Zaleta korzystania z Object.create
Moje pytanie brzmi, ponieważ obiekt Object.create nie istnieje na
wiele popularnych przeglądarek
IE, jaki jest sens nawet próbując go użyć? Z pewnością zaśmieca kod, a jeden z komentujących na poprzednim pytaniu wspomniał, że Object.create isn't too fast.
Jaka jest korzyść z próby dodania dodatkowego kodu, aby od czasu do czasu wykorzystać tę funkcję ECMA 5, która może być wolniejsza od "starej" metody?
function inherit(p) {
if (Object.create) // If Object.create() is defined...
return Object.create(p); // then just use it.
function f() {}; // Define a dummy constructor function.
f.prototype = p; // Set its prototype property to p.
return new f(); // Use f() to create an "heir" of p.
}
To naprawdę przydatna odpowiedź; Rozumiem, dlaczego tworzenie byłoby lepsze, ponieważ daje ci dużą kontrolę nad właściwościami w obiekcie, który został utworzony. Rozumiem, dlaczego chcesz powiedzieć 'var bob = Object.create (userB, {" id ": {wartość: 12, wyliczalna: false' i tak dalej, ale nie spowoduje to gwałtownego zawieszenia tego kodu w IE9 i poniżej "Czy takie kodowanie nie byłoby ograniczone do (cudownych) sytuacji, w których można kontrolować przeglądarkę, której używają użytkownicy? –
Innymi słowy, w IE8 nie tylko będę musiał uzyskać moją nową dziedziczoną metodę za pomocą starego JS metoda zamiany prototypów wokół, ale będę również musiała zmienić obiekt, który jest przekazywany, aby służyć jako "potomny" obiekt, który dziedziczy po userB. Zamiast '{" id ": {wartość: 12, wyliczalna: false 'nie będę potrzebował' {"id": 12, "name": "bob" 'i tak dalej? –
@AdamRackis, to prawda, kod taki jak-jest niezgodny wstecz, ale jestem pewien, że istnieje projekty, które próbują i usprawniają te rzeczy, a jeśli nie, to jest to dobry pomysł.Nie byłoby trudno zautomatyzować te zmiany. – davin