2012-09-18 10 views
10

Wygląda na to, że biblioteka podkreśleń nie będzie traktować funkcji w JSON jako obywateli pierwszej klasy. Dlaczego to skrzypce nie działa?Podkreślenie 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)); 

Dlaczego nie c prawo wartość? Wydaje się, że

d ma odpowiednią wartość, jeśli używamy wyłącznie łańcuchów jako kluczy i wartości.

Jak mogę obejść to ograniczenie?

+0

To pytanie pozwoliło mi na ponowne zapamiętanie odpowiedzi [http://pl.wydawnyfirmy.pl/pobytów/122102/most-efektywnego-zdrowia-do-klonowego-obiektu] od Johna Resiga. – haudoing

Odpowiedz

11

c ma właściwą wartość:

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

Twój problem jest, że używasz JSON.stringify produkować sznurki do alert, nie ma reprezentacja funkcji w JSON tak JSON.stringify(c) pozostawia f1 out. Jeśli używasz console.log aby zobaczyć wyniki będziesz miał więcej szczęścia: http://jsfiddle.net/ambiguous/7j7hu/

Tak na marginesie, należy pamiętać, że przy użyciu _.extend ten sposób:

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

będzie również modyfikować b i że nie może być twoim zamiarem.

+1

Idealny. Dziękuję Ci! Nigdy bym nie wiedział, że problem dotyczy JSON.stringify – sat