11

看起来下划线库不会将 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如果我们只使用字符串作为键和值,似乎具有正确的值。

我怎样才能绕过这个限制?

4

1 回答 1

12

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,这可能不是你的意图。

于 2012-09-18T04:06:14.213 回答