mirror of https://github.com/nodejs/node.git
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
parent
f8ba9c3bc9
commit
f080de5380
|
@ -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 ? [ ] : { } )
|
||||
|
|
|
@ -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);
|
Loading…
Reference in New Issue