Ich habe es satt, immer so Code schreiben zu müssen:
function shallowExtend(obj1,obj2){
var key;
for ( key in obj2 ) {
if ( obj2.hasOwnProperty(key) === false ) continue;
obj1[key] = obj2[key]
}
}
Oder wenn ich den Code nicht selbst schreiben möchte, implementieren Sie eine Bibliothek, die dies bereits tut. Sicherlich kommt ES6 + zur Rettung, um uns so etwas wie ein Object.prototype.extend(obj2...)
oder zu liefernObject.extend(obj1,obj2...)
Bietet ES6 + solche Funktionen? Wenn nicht bereits vorhanden, ist eine solche Funktionalität dann geplant? Wenn nicht geplant, warum dann nicht?
javascript
ecmascript-6
Balupton
quelle
quelle
[[Prototype]]
Kette? Machst du "tiefe" oder "flache" Kopien? Was ist mit nicht aufzählbaren und nicht beschreibbaren Eigenschaften? Ich denke, ich hätte lieber eine kleine Bibliotheksfunktion, die das tut, was ich brauche, und meistens ist sie sowieso vermeidbar.Antworten:
Mit Object.assign können Sie in ES6 eine flache Zusammenführung / Erweiterung / Zuweisung durchführen:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
Syntax:
Dabei steht ... source für das / die Quellobjekt (e).
Beispiel:
quelle
let merged = Object.assign({}, source1, source2);
Object.assign
: siehe meine Antwort hierJSON.parse(JSON.stringify(src))
Sie können hierfür die Objektverbreitungssyntax verwenden :
Für Arrays war der Spread-Operator bereits Teil von ES6 (ES2015), für Objekte wurde er jedoch der Sprachspezifikation bei ES9 (ES2018) hinzugefügt. Sein Vorschlag wurde in Tools wie Babel schon lange vorher standardmäßig aktiviert.
quelle
const ob1 = {foo: 123}; const ob2 = {bar: 234}; const merged = {...ob1, ...ob2}; console.log(merged)
Ausgabe:{ foo: 123, bar: 234 }
Ich weiß, dass dies ein altes Problem ist, aber die einfachste Lösung in ES2015 / ES6 ist mit Object.assign () recht einfach.
Hoffentlich hilft das, dies führt auch zum Zusammenführen von DEEP :
Anwendungsbeispiel:
quelle
Die Hinzufügung von
Object.mixin
wird derzeit diskutiert, um das von Ihnen gewünschte Verhalten zu berücksichtigen.https://mail.mozilla.org/pipermail/es-discuss/2012-December/027037.htmlObwohl es noch nicht im ES6-Entwurf enthalten ist, scheint es viel Unterstützung dafür zu geben, daher denke ich, dass es bald in den Entwürfen auftauchen wird.
quelle
.mixin
wurde von TC39 fallen gelassen.ES6
ES7 oder Babel
quelle
Vielleicht erledigt die ES5-
Object.defineProperties
Methode den Job?z.B
MDN-Dokumentation: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperties
quelle
defineProperties
eigene Eigenschaften definiert werden. Es überschreibt keine Eigenschaften in der[[prototype]]
Kette, es schattiert sie.Object.getOwnPropertyDescriptor
auch verwendet werden, um die Eigenschaft festzulegen, wenn es sich um einen komplexen Wert handelt, oder Sie kopieren als Referenz.