gossi's extension of David Coallier's method:
Check these two lines:
from = arguments[i];
Object.getOwnPropertyNames(from).forEach(function (name) {
One need to check "from" against null object... If for example merging an object that comes from an Ajax response, previously created on a server, an object property can have a value of "null", and in that case the above code generates an error saying:
"from" is not a valid object
So for example, wrapping the "...Object.getOwnPropertyNames(from).forEach..." function with an "if (from != null) { ... }" will prevent that error occurring.