Two bug fixes for process.mixin

Bug #1 occurred when trying to use process.mixin on a function and
produced a fatal exception.

Bug #2 occurred when trying to do a deep merge with an object containing
one or more objects with a nodeType property. In those cases the deep
copy for this part of the object was not performed and a shallow one was
performed instead.

Both of these bugs were artifacts of the jQuery.extend port.
pull/22966/head
Felix Geisendörfer 2009-12-06 18:57:20 +01:00 committed by Ryan Dahl
parent f8ba9c3bc9
commit f080de5380
2 changed files with 18 additions and 2 deletions

View File

@ -109,7 +109,7 @@ process.mixin = function() {
}
// Handle case when target is a string or something (possible in deep copy)
if ( typeof target !== "object" && !process.isFunction(target) )
if ( typeof target !== "object" && !(typeof target === 'function') )
target = {};
// mixin process itself if only one argument is passed
@ -130,7 +130,7 @@ process.mixin = function() {
continue;
// Recurse if we're merging object values
if ( deep && copy && typeof copy === "object" && !copy.nodeType )
if ( deep && copy && typeof copy === "object" )
target[ name ] = process.mixin( deep,
// Never move original objects, clone them
src || ( copy.length != null ? [ ] : { } )

View File

@ -0,0 +1,16 @@
process.mixin(require("./common"));
var target = function() {};
process.mixin(target, {
foo: 'bar'
});
assert.equal('bar', target.foo);
// This test verifies there are no DOM-related aspects to process.mixin which
// originally had been in there due to its jQuery origin.
var fakeDomElement = {deep: {nodeType: 4}};
target = {};
process.mixin(true, target, fakeDomElement);
assert.notStrictEqual(target.deep, fakeDomElement.deep);