2011-04-07 21 views
12

Tengo un objeto global de JavaScript con múltiples propiedades y funciones que estoy creando de esta manera:La extensión de un objeto con múltiples propiedades en JavaScript

myObject = {}; 

pensé que pueda extenderse fácilmente este objetivo mediante la creación de algo así como este

myObject = { propA1 : null, ....., propAN : null}; 

en lugar de

myObject.propA1 = null; 
myObject......; 
myObject.propAN = null; 

¿Qué le pasa con mi enfoque?

+0

Cuando dice "extender". ¿Quiere agregar más propiedades al objeto? ¿O es que el OOP "extender" significa "heredar" ed por otros objetos? –

+0

Quise decir el objeto en sí y no la clase – user385411

Respuesta

13

Cuando escribe myObject = { ... }, está creando un objeto nuevo y configurando myObject para apuntar a él.
Se descarta el valor anterior de myObject.

su lugar, puede utilizar jQuery:

jQuery.extend(myObject, { newProperty: whatever }); 
+0

Supongo que debería ir con esta solución, pero me pregunto qué tan caro es. Mi objeto es muy pesado – user385411

+0

@user: Esto no crea ninguna copia; simplemente asigna referencias. Debería ser rápido. – SLaks

+3

OP preguntó acerca de Javascript, no jquery. También le quita el verdadero aprendizaje de objetos Javascript. – dman

12

Sin jQuery, puede crear una matriz de objetos con algo como esto:

[{'key': 'atuhoetu', 'value': 'uehtnehatn'},{...}] 

Si no se preocupan por la compatibilidad, la reciente navegadores deben apoyar esto:

var newObj = {prop1: 'val', prop2: 'val'}; 
Object.keys(newObj).forEach(function (item) { 
    myObject[item] = newObj[item]; 
}); 

esto iterar sobre todos los artículos en newObject y agrégalos a myObj.

+0

Solución muy elegante, pero supongo que jQuery Extend está haciendo lo mismo – user385411

+2

Sí, supongo que solo depende de si está usando jQuery. Uso javascript en el lado del servidor, y esto permite que el código se use en el servidor Y el cliente ... – tjameson

+0

Gracias. Ya estoy usando jQuery de todos modos. En realidad, estaba buscando el concepto de clase parcial que tenemos .NET para poder distribuir el mismo objeto en múltiples archivos. – user385411

0

O algo más limpio:

function extend(target, source){ 
    for(prop in source){ 
     target[prop] = source[prop]; 
    } 
} 

Si lo usa de la siguiente manera:

var objA = {a: "a"}; 
var objB = {b: "b", c: "c"}; 
extend(objA, objB); 

el resultado será:

objA = {a: "a", b: "b", c: "c"}; 
Cuestiones relacionadas