Cleanup baseClone.

This commit is contained in:
John-David Dalton
2013-09-26 21:05:10 -07:00
parent 9749305ecd
commit 4a369af4c7
6 changed files with 55 additions and 73 deletions

View File

@@ -1008,46 +1008,41 @@
* @param {Function} [callback] The function to customize cloning values.
* @param {Array} [stackA=[]] Tracks traversed source objects.
* @param {Array} [stackB=[]] Associates clones with source counterparts.
* @returns {*} Returns the cloned `value`.
* @returns {*} Returns the cloned value.
*/
function baseClone(value, deep, callback, stackA, stackB) {
var result = value;
if (callback) {
result = callback(result);
var result = callback(value);
if (typeof result != 'undefined') {
return result;
}
result = value;
}
// inspect [[Class]]
var isObj = isObject(result);
var isObj = isObject(value);
if (isObj) {
var className = toString.call(result);
if (!cloneableClasses[className] || (!support.nodeClass && isNode(result))) {
return result;
var className = toString.call(value);
if (!cloneableClasses[className] || (!support.nodeClass && isNode(value))) {
return value;
}
var ctor = ctorByClass[className],
isArr = isArray(result);
var ctor = ctorByClass[className];
switch (className) {
case boolClass:
case dateClass:
return new ctor(+result);
return new ctor(+value);
case numberClass:
case stringClass:
return new ctor(result);
return new ctor(value);
case regexpClass:
var lastIndex = result.lastIndex;
result = ctor(result.source, reFlags.exec(result));
result.lastIndex = lastIndex;
result = ctor(value.source, reFlags.exec(value));
result.lastIndex = value.lastIndex;
return result;
}
} else {
return result;
return value;
}
var isArr = isArray(value);
if (deep) {
// check for circular references and return corresponding clone
var initedStack = !stackA;
@@ -1060,11 +1055,10 @@
return stackB[length];
}
}
// init cloned object
result = isArr ? ctor(result.length) : {};
result = isArr ? ctor(value.length) : {};
}
else {
result = isArr ? slice(result) : assign({}, result);
result = isArr ? slice(value) : assign({}, value);
}
// add array properties assigned by `RegExp#exec`
if (isArr) {
@@ -1996,7 +1990,7 @@
* @param {boolean} [deep=false] Specify a deep clone.
* @param {Function} [callback] The function to customize cloning values.
* @param {*} [thisArg] The `this` binding of `callback`.
* @returns {*} Returns the cloned `value`.
* @returns {*} Returns the cloned value.
* @example
*
* var stooges = [
@@ -2050,7 +2044,7 @@
* @param {*} value The value to deep clone.
* @param {Function} [callback] The function to customize cloning values.
* @param {*} [thisArg] The `this` binding of `callback`.
* @returns {*} Returns the deep cloned `value`.
* @returns {*} Returns the deep cloned value.
* @example
*
* var stooges = [