2012-09-18 15 views
10

Sembra che la libreria Underscore non tratterà le funzioni in JSON come cittadini di prima classe. Perché questo violino non funziona?Underscore js extend method

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)); 

Perché non c il giusto valore?

d sembra avere il valore corretto se usiamo solo stringhe come chiavi e valori.

Come posso aggirare questa limitazione?

+0

Questa domanda mi consente di ricordare [risposta] (http://stackoverflow.com/questions/122102/most-efficient-way-to-clone-an-object) di nuovo da parte di John Resig. – haudoing

risposta

11

c ha il giusto valore:

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

Il tuo problema è che si sta utilizzando JSON.stringify per la produzione di corde per alert, non c'è rappresentazione di una funzione in JSON così JSON.stringify(c) lascia f1 fuori. Se si utilizza console.log di visualizzare i risultati avrai più fortuna: http://jsfiddle.net/ambiguous/7j7hu/

Per inciso, si dovrebbe tenere a mente che l'utilizzo di _.extend in questo modo:

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

sarà anche modificare b e che potrebbero non sii il tuo intento

+1

Perfetto. Grazie! Non avrei mai saputo che il problema era con JSON.stringify – sat