Estoy cansado de tener que escribir siempre código como este:
function shallowExtend(obj1,obj2){
var key;
for ( key in obj2 ) {
if ( obj2.hasOwnProperty(key) === false ) continue;
obj1[key] = obj2[key]
}
}
O si no quiero escribir el código yo mismo, implemente una biblioteca que ya lo haga. Seguramente ES6 + vendrá al rescate en esto nos proporcionará algo así como un Object.prototype.extend(obj2...)
oObject.extend(obj1,obj2...)
Entonces, ¿ES6 + proporciona esa funcionalidad? Si aún no está allí, ¿se planifica dicha funcionalidad? Si no está planeado, ¿por qué no?
javascript
ecmascript-6
Balupton
fuente
fuente
[[Prototype]]
cadena? ¿Haces copias "profundas" o "superficiales"? ¿Qué pasa con las propiedades no enumerables y no editables? Creo que prefiero tener una pequeña función de biblioteca que haga lo que necesito, y sobre todo es evitable de todos modos.Respuestas:
Podrá hacer una fusión / extensión / asignación superficial en ES6 utilizando Object.assign:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
Sintaxis:
donde ... fuentes representa los objetos fuente.
Ejemplo:
fuente
let merged = Object.assign({}, source1, source2);
Object.assign
: vea mi respuesta aquíJSON.parse(JSON.stringify(src))
Puede usar la sintaxis de propagación de objetos para esto:
Para las matrices, el operador de propagación ya era parte de ES6 (ES2015), pero para los objetos se agregó a la especificación de lenguaje en ES9 (ES2018). Su propuesta fue habilitada por defecto en herramientas como Babel mucho antes de eso.
fuente
const ob1 = {foo: 123}; const ob2 = {bar: 234}; const merged = {...ob1, ...ob2}; console.log(merged)
Salida:{ foo: 123, bar: 234 }
Sé que este es un problema un poco antiguo, pero la solución más fácil en ES2015 / ES6 es bastante simple, usando Object.assign (),
Esperemos que esto ayude, esto también hace una fusión PROFUNDA :
Ejemplo de uso:
fuente
La adición de
Object.mixin
se está discutiendo actualmente para cuidar el comportamiento que está solicitando. https://mail.mozilla.org/pipermail/es-discuss/2012-December/027037.htmlAunque todavía no está en el borrador de ES6, parece que hay mucho apoyo para él, por lo que creo que aparecerá pronto en los borradores.
fuente
.mixin
ha sido eliminado por TC39.ES6
ES7 o Babel
fuente
¿Quizás el
Object.defineProperties
método ES5 hará el trabajo?p.ej
Documentación de MDN: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperties
fuente
defineProperties
define propiedades propias. No sobrescribe las propiedades en la[[prototype]]
cadena, las sombrea.Object.getOwnPropertyDescriptor
también para establecer la propiedad cuando es un valor complejo, o copiará por referencia.