function _fnExtend(out, extender, breakRefs) {
		var val;

		for (var prop in extender) {
			if (Object.prototype.hasOwnProperty.call(extender, prop)) {
				val = extender[prop];

				if ($.isPlainObject(val)) {
					if (!$.isPlainObject(out[prop])) {
						out[prop] = {};
					}
					$.extend(true, out[prop], val);
				}
				else if (breakRefs && prop !== 'data' && prop !== 'aaData' && Array.isArray(val)) {
					out[prop] = val.slice();
				}
				else {
					out[prop] = val;
				}
			}
		}

		return out;
	}
Extend objects - very similar to jQuery.extend, but deep copy objects, and
shallow copy arrays. The reason we need to do this, is that we don't want to
deep copy array init values (such as aaSorting) since the dev wouldn't be
able to override them, but we do want to deep copy arrays.
 @param {object} out Object to extend
 @param {object} extender Object from which the properties will be applied to
     out
 @param {boolean} breakRefs If true, then arrays will be sliced to take an
     independent copy with the exception of the `data` or `aaData` parameters
     if they are present. This is so you can pass in a collection to
     DataTables and have that used as your data source without breaking the
     references
 @returns {object} out Reference, just for convenience - out === the return.
 @memberof DataTable#oApi
 @todo This doesn't take account of arrays inside the deep copied objects.