2017-03-03 6 views
2

Ich versuche, den Eigenschaften-Objekt-Parameter in Object.create zu verwenden, das MDN sagt, dass Sie ein Objekt in es übergeben, aber wenn ich ein Objekt in es übergebe, erhalte ich einen Fehler, ein Objekt zu übergeben, bin ich verwirrt als zu dem, was ich falschWarum funktioniert diese einfache Vererbung nicht?

let mammal={hasFur:true} 

let dog=Object.create(mammal,{legs:4});//returns Uncaught TypeError: Property description must be an object: true at Function.create (<anonymous>) 

Antwort

3

Sie haben legs als 4, beschrieben und 4 ist kein Objekt zu tun.

Siehe the MDN documentation, die Beispiele für die möglichen Dinge enthält, die Sie dort zuordnen:

o = Object.create(Object.prototype, { 
    // foo is a regular 'value property' 
    foo: { 
    writable: true, 
    configurable: true, 
    value: 'hello' 
    }, 

In diesem Beispiel wir foo statt legs verwenden. Der Wert eines Objekts, das eine value-Eigenschaft enthält, die den Standardwert für foo enthält.

2

In einer einfachen Definition ist Object.create(proto[, propertiesObject]) ein Mittel zum Definieren der Zusammenfassung für Objekteigenschaften oder Definieren der Spezifikation von Objekteigenschaften. Es funktioniert wie abstract classes in einigen der anderen Sprachen, & kein specific object.

Es ist nicht dort, um einen Standardwert für die Requisiten des Objekts, das erstellt wird, bereitzustellen. Sie haben nur ein Literal (4) angegeben, das offensichtlich kein Objekt ist, das die Spezifikation für die Eigenschaft beschreiben kann. Wir werden hier sehen, dass 4 in seiner eigenen (auch nicht unbedingt) nur ein Teil der Eigenschaften Objekt für Beine ist.

Jetzt. In diesem Sinne versuchen wir, Ihr dog Objekt mit Object.create() zu erstellen. Los geht's:

  • Anforderungen: wir unseren Hund wollen eine Immobilie mit dem Namen legs.
  • Design: Wir brauchen legs, um beim Aufzählen des Objekts aufzählbar zu sein. wir wollen es nicht anderen mit dem Zuweisungsoperator überlassen. & auch wollen wir 4.
  • Implementierung auf Standard: Nun, da wir auf Spezifikation von legs Eigenschaft entschieden haben, brauchen wir eine Property Descriptor es zu definieren [den zweiten Parameter von Object.defineProperties(obj, props)]

Die. props oben erwähnte zweite ist {& optional} Parameter in Object.create(proto[, propertiesObject]) & hat einige Tasten zum beschreiben Eigenschaften von Objekten:

props {configurable, enumerable, value, writable, get, set} 

Lets Code die dog Objekt:

let dog=Object.create(mammal,{ 
         legs:{ 
          enumerable : true, 
          writable : false, 
          value : 4 } 
        }); 

Für weitere Klärung, verknüpft beide der Referenzen lesen oben, ist sehr hilfreich.

Verwandte Themen