2012-09-18 73 views
10

看起來Underscore庫不會將JSON中的函數視爲一等公民。爲什麼這個小提琴不起作用?下劃線js擴展方法

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

爲什麼不是c正確的價值?

d似乎有正確的價值,如果我們只使用字符串作爲鍵和值。

我該如何解決這個限制?

+0

這個問題讓我再次記住John Resig的[answer](http://stackoverflow.com/questions/122102/most-efficient-way-to-clone-an-object)。 – haudoing

回答

11

c確實有正確的價值:

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

你的問題是,你正在使用JSON.stringify產生字符串alert,也沒有在JSON函數的表示,使得JSON.stringify(c)離開f1出來。如果您使用console.log查看你的結果你有更好的運氣:http://jsfiddle.net/ambiguous/7j7hu/

順便說一句,你應該記住,使用_.extend這樣:

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

還將修改b和可能不是你的意圖。

+1

完美。謝謝!我從來不知道問題出在JSON.stringify上 – sat