Looks like Underscore library won't treat functions in JSON as first class citizens. Why doesn't this fiddle work?
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));
Why isn't c
the right value?
d
seems to have the right value if we only use strings as keys and values.
How can I get around this limitation?
Adding Underscore to a Node. js modules using the CommonJS syntax: var _ = require('underscore'); Now we can use the object underscore (_) to operate on objects, arrays and functions.
In JavaScript, the dollar sign ($) and underscore (_) are both identifiers—similar to any other name, like myCar or houseAge. You can use a dollar sign or underscore to identify objects, such as: Variables. Functions.
The extends keyword can be used to extend the objects as well as classes in JavaScript. It is usually used to create a class which is child of another class. Syntax: class childclass extends parentclass {...}
c
does have the right value:
{
f1: function () {var s='success';},
foo: "bar"
}
Your problem is that you're using JSON.stringify
to produce strings for alert
, there is no representation of a function in JSON so JSON.stringify(c)
leaves f1
out. If you use console.log
to view your results you'll have better luck: http://jsfiddle.net/ambiguous/7j7hu/
As an aside, you should keep in mind that using _.extend
this way:
var c = _.extend(b, a);
will also modify b
and that might not be your intent.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With