Метод подчеркивания js extend

Похоже, библиотека Underscore не будет рассматривать функции в JSON в качестве граждан первого класса. Почему эта скрипка не работает?

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 похоже, имеет правильное значение, если мы используем только строки как ключи и значения.

Как я могу обойти это ограничение?

Ответ 1

c имеет правильное значение:

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

Ваша проблема в том, что вы используете JSON.stringify для создания строк для alert, в JSON нет представления функции, поэтому JSON.stringify(c) выходит f1 out. Если вы используете console.log для просмотра ваших результатов, вам повезет больше: http://jsfiddle.net/ambiguous/7j7hu/

В стороне, вы должны иметь в виду, что используя _.extend следующим образом:

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

также изменит b, и это может быть не ваше намерение.