下划线js扩展方法

时间:2012-09-18 03:46:53

标签: javascript underscore.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 个答案:

答案 0 :(得分:12)

c确实有正确的值:

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

您的问题是,您使用JSON.stringifyalert生成字符串,JSON中没有函数的表示,因此JSON.stringify(c)f1留出。{1}}。如果您使用console.log查看结果,那么您将获得更好的运气:http://jsfiddle.net/ambiguous/7j7hu/

顺便说一句,你应该记住以这种方式使用_.extend

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

也会修改b,这可能不是您的意图。