2012-09-18 19 views
10

Parece que la biblioteca Underscore no tratará las funciones en JSON como ciudadanos de primera clase. ¿Por qué este violín no funciona?Underscore js extiende el método

http://jsfiddle.net/anV28/

var a = { 'f1': function(){var s='success';} }; 
var b = {'foo' : 'bar'}; 
var c = _.extend(b, a); 
alert(JSON.stringify(c)); 

var d = _.extend({name : 'moe'}, {age : 50}); 
alert(JSON.stringify(d)); 

¿Por qué no c el valor correcto?

d parece tener el valor correcto si solo usamos cadenas como claves y valores.

¿Cómo puedo evitar esta limitación?

+0

Esta pregunta me permitió recordar la [respuesta] (http://stackoverflow.com/questions/122102/most-efficient-way-to-clone-an-object) de John Resig nuevamente. – haudoing

Respuesta

11

c tiene el valor correcto:

{ 
    f1: function() {var s='success';}, 
    foo: "bar" 
} 

Su problema es que usted está utilizando JSON.stringify para producir cadenas de alert, no hay representación de una función en JSON de manera JSON.stringify(c)f1 deja salir. Si utiliza console.log para ver los resultados que usted tenga mejor suerte: http://jsfiddle.net/ambiguous/7j7hu/

Dicho sea de paso, se debe tener en cuenta que el uso _.extend esta manera:

var c = _.extend(b, a); 

también modificarán b y que no podría sé tu intención

+1

Perfecto. ¡Gracias! Nunca hubiera sabido que el problema era con JSON.stringify – sat

Cuestiones relacionadas