2010-08-13 14 views

Respuesta

6

Deberá iterar sobre el objeto y hacer copias de todas sus propiedades.

Y luego, si alguna de sus propiedades también son objetos, suponiendo que desee clonar también, tendrá que recursear en ellos.

Hay varios métodos para hacer esto aquí: What is the most efficient way to clone a JavaScript object?

+1

Tenga en cuenta también que esto no es único para todos: es poco probable que haga algo útil para objetos incorporados como nodos DOM en los que desee utilizar el método cloneNode(), etc. – thomasrutter

1
function objToClone(obj){ 
    return (new Function("return " + obj)) 
} 
+3

EW, eval()! No estoy seguro de que esto funcione tampoco, a menos que obj tenga un método toString() significativo. – thomasrutter

+0

¿No devolvería una referencia? – borrel

6

Así es como yo lo haría, basado en thomasrutter's suggestion (código no probado):

function cloneObj(obj) { 
    var clone = {}; 

    for (var i in obj) { 
     if (obj[i] && typeof obj[i] == 'object') { 
      clone[i] = cloneObj(obj[i]); 
     } else { 
      clone[i] = obj[i]; 
     } 
    } 

    return clone; 
} 
+2

'obj.i 'no funcionará, tendrá acceso a la propiedad' "i" 'literalmente, necesita usar la notación de corchetes, por ej. 'obj [i]' – CMS

+1

@CMS: gracias, lo he arreglado ahora. – BoltClock

+0

Esto no parece correcto. cloneObject ({name: null}) => {"name": {}} – Niyaz

2

JavaScript JS objeto clon

Object._clone = function(obj) { 
    var clone, property, value; 
    if (!obj || typeof obj !== 'object') { 
    return obj; 
    } 
    clone = typeof obj.pop === 'function' ? [] : {}; 
    clone.__proto__ = obj.__proto__; 
    for (property in obj) { 
    if (obj.hasOwnProperty(property)) { 
     value = obj.property; 
     if (value && typeof value === 'object') { 
     clone[property] = Object._clone(value); 
     } else { 
     clone[property] = obj[property]; 
     } 
    } 
    } 
    return clone; 
}; 

CoffeeScript JS objeto clon

# Object clone 
Object._clone = (obj) -> 
    return obj if not obj or typeof(obj) isnt 'object' 
    clone = if typeof(obj.pop) is 'function' then [] else {} 

    # deprecated, but need for instanceof method 
    clone.__proto__ = obj.__proto__ 

    for property of obj 
    if obj.hasOwnProperty property 
     # clone properties 
     value = obj.property 
     if value and typeof(value) is 'object' 
     clone[property] = Object._clone(value) 
     else 
     clone[property] = obj[property] 

    clone 

Ahora usted puede tratar de hacer que

A = new TestKlass 
B = Object._clone(A) 
B instanceof TestKlass => true