mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-10 02:47:50 +00:00
Code cleanup and removal of ctorByClass.
This commit is contained in:
120
lodash.js
120
lodash.js
@@ -130,38 +130,24 @@
|
|||||||
weakMapClass = '[object WeakMap]';
|
weakMapClass = '[object WeakMap]';
|
||||||
|
|
||||||
var arrayBufferClass = '[object ArrayBuffer]',
|
var arrayBufferClass = '[object ArrayBuffer]',
|
||||||
f32Class = '[object Float32Array]',
|
float32Class = '[object Float32Array]',
|
||||||
f64Class = '[object Float64Array]',
|
float64Class = '[object Float64Array]',
|
||||||
i8Class = '[object Int8Array]',
|
int8Class = '[object Int8Array]',
|
||||||
i16Class = '[object Int16Array]',
|
int16Class = '[object Int16Array]',
|
||||||
i32Class = '[object Int32Array]',
|
int32Class = '[object Int32Array]',
|
||||||
u8Class = '[object Uint8Array]',
|
uint8Class = '[object Uint8Array]',
|
||||||
u8cClass = '[object Uint8ClampedArray]',
|
uint8ClampedClass = '[object Uint8ClampedArray]',
|
||||||
u16Class = '[object Uint16Array]',
|
uint16Class = '[object Uint16Array]',
|
||||||
u32Class = '[object Uint32Array]';
|
uint32Class = '[object Uint32Array]';
|
||||||
|
|
||||||
/** Used to identify object classifications that `_.clone` supports */
|
|
||||||
var cloneableClasses = {};
|
|
||||||
cloneableClasses[argsClass] = cloneableClasses[arrayClass] =
|
|
||||||
cloneableClasses[arrayBufferClass] = cloneableClasses[boolClass] =
|
|
||||||
cloneableClasses[dateClass] = cloneableClasses[errorClass] =
|
|
||||||
cloneableClasses[f64Class] = cloneableClasses[i8Class] =
|
|
||||||
cloneableClasses[i16Class] = cloneableClasses[i32Class] =
|
|
||||||
cloneableClasses[numberClass] = cloneableClasses[objectClass] =
|
|
||||||
cloneableClasses[regexpClass] = cloneableClasses[stringClass] =
|
|
||||||
cloneableClasses[u8Class] = cloneableClasses[u8cClass] =
|
|
||||||
cloneableClasses[u16Class] = cloneableClasses[u32Class] = true;
|
|
||||||
cloneableClasses[funcClass] = cloneableClasses[mapClass] =
|
|
||||||
cloneableClasses[setClass] = cloneableClasses[weakMapClass] = false;
|
|
||||||
|
|
||||||
/** Used to identify object classifications that are treated like arrays */
|
/** Used to identify object classifications that are treated like arrays */
|
||||||
var arrayLikeClasses = {};
|
var arrayLikeClasses = {};
|
||||||
arrayLikeClasses[argsClass] =
|
arrayLikeClasses[argsClass] =
|
||||||
arrayLikeClasses[arrayClass] = arrayLikeClasses[f32Class] =
|
arrayLikeClasses[arrayClass] = arrayLikeClasses[float32Class] =
|
||||||
arrayLikeClasses[f64Class] = arrayLikeClasses[i8Class] =
|
arrayLikeClasses[float64Class] = arrayLikeClasses[int8Class] =
|
||||||
arrayLikeClasses[i16Class] = arrayLikeClasses[i32Class] =
|
arrayLikeClasses[int16Class] = arrayLikeClasses[int32Class] =
|
||||||
arrayLikeClasses[u8Class] = arrayLikeClasses[u8cClass] =
|
arrayLikeClasses[uint8Class] = arrayLikeClasses[uint8ClampedClass] =
|
||||||
arrayLikeClasses[u16Class] = arrayLikeClasses[u32Class] = true;
|
arrayLikeClasses[uint16Class] = arrayLikeClasses[uint32Class] = true;
|
||||||
arrayLikeClasses[arrayBufferClass] = arrayLikeClasses[boolClass] =
|
arrayLikeClasses[arrayBufferClass] = arrayLikeClasses[boolClass] =
|
||||||
arrayLikeClasses[dateClass] = arrayLikeClasses[errorClass] =
|
arrayLikeClasses[dateClass] = arrayLikeClasses[errorClass] =
|
||||||
arrayLikeClasses[funcClass] = arrayLikeClasses[mapClass] =
|
arrayLikeClasses[funcClass] = arrayLikeClasses[mapClass] =
|
||||||
@@ -169,6 +155,20 @@
|
|||||||
arrayLikeClasses[regexpClass] = arrayLikeClasses[setClass] =
|
arrayLikeClasses[regexpClass] = arrayLikeClasses[setClass] =
|
||||||
arrayLikeClasses[stringClass] = arrayLikeClasses[weakMapClass] = false;
|
arrayLikeClasses[stringClass] = arrayLikeClasses[weakMapClass] = false;
|
||||||
|
|
||||||
|
/** Used to identify object classifications that `_.clone` supports */
|
||||||
|
var cloneableClasses = {};
|
||||||
|
cloneableClasses[argsClass] = cloneableClasses[arrayClass] =
|
||||||
|
cloneableClasses[arrayBufferClass] = cloneableClasses[boolClass] =
|
||||||
|
cloneableClasses[dateClass] = cloneableClasses[errorClass] =
|
||||||
|
cloneableClasses[float64Class] = cloneableClasses[int8Class] =
|
||||||
|
cloneableClasses[int16Class] = cloneableClasses[int32Class] =
|
||||||
|
cloneableClasses[numberClass] = cloneableClasses[objectClass] =
|
||||||
|
cloneableClasses[regexpClass] = cloneableClasses[stringClass] =
|
||||||
|
cloneableClasses[uint8Class] = cloneableClasses[uint8ClampedClass] =
|
||||||
|
cloneableClasses[uint16Class] = cloneableClasses[uint32Class] = true;
|
||||||
|
cloneableClasses[funcClass] = cloneableClasses[mapClass] =
|
||||||
|
cloneableClasses[setClass] = cloneableClasses[weakMapClass] = false;
|
||||||
|
|
||||||
/** Used as an internal `_.debounce` options object by `_.throttle` */
|
/** Used as an internal `_.debounce` options object by `_.throttle` */
|
||||||
var debounceOptions = {
|
var debounceOptions = {
|
||||||
'leading': false,
|
'leading': false,
|
||||||
@@ -683,17 +683,6 @@
|
|||||||
nativeParseInt = context.parseInt,
|
nativeParseInt = context.parseInt,
|
||||||
nativeRandom = Math.random;
|
nativeRandom = Math.random;
|
||||||
|
|
||||||
/** Used to lookup built-in constructors by `[[Class]]` */
|
|
||||||
var ctorByClass = {};
|
|
||||||
ctorByClass[arrayClass] = Array;
|
|
||||||
ctorByClass[boolClass] = Boolean;
|
|
||||||
ctorByClass[dateClass] = Date;
|
|
||||||
ctorByClass[funcClass] = Function;
|
|
||||||
ctorByClass[objectClass] = Object;
|
|
||||||
ctorByClass[numberClass] = Number;
|
|
||||||
ctorByClass[regexpClass] = RegExp;
|
|
||||||
ctorByClass[stringClass] = String;
|
|
||||||
|
|
||||||
/** Used to avoid iterating over non-enumerable properties in IE < 9 */
|
/** Used to avoid iterating over non-enumerable properties in IE < 9 */
|
||||||
var nonEnumProps = {};
|
var nonEnumProps = {};
|
||||||
nonEnumProps[arrayClass] = nonEnumProps[dateClass] = nonEnumProps[numberClass] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true };
|
nonEnumProps[arrayClass] = nonEnumProps[dateClass] = nonEnumProps[numberClass] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true };
|
||||||
@@ -814,12 +803,12 @@
|
|||||||
var support = lodash.support = {};
|
var support = lodash.support = {};
|
||||||
|
|
||||||
(function(x) {
|
(function(x) {
|
||||||
var ctor = function() { this.x = 1; },
|
var Ctor = function() { this.x = 1; },
|
||||||
object = { '0': 1, 'length': 1 },
|
object = { '0': 1, 'length': 1 },
|
||||||
props = [];
|
props = [];
|
||||||
|
|
||||||
ctor.prototype = { 'valueOf': 1, 'y': 1 };
|
Ctor.prototype = { 'valueOf': 1, 'y': 1 };
|
||||||
for (var key in new ctor) { props.push(key); }
|
for (var key in new Ctor) { props.push(key); }
|
||||||
for (var argsKey in arguments) { }
|
for (var argsKey in arguments) { }
|
||||||
for (var strKey in 'x') { }
|
for (var strKey in 'x') { }
|
||||||
|
|
||||||
@@ -862,7 +851,7 @@
|
|||||||
* @memberOf _.support
|
* @memberOf _.support
|
||||||
* @type boolean
|
* @type boolean
|
||||||
*/
|
*/
|
||||||
support.enumPrototypes = propertyIsEnumerable.call(ctor, 'prototype');
|
support.enumPrototypes = propertyIsEnumerable.call(Ctor, 'prototype');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Detect if functions can be decompiled by `Function#toString`
|
* Detect if functions can be decompiled by `Function#toString`
|
||||||
@@ -1230,29 +1219,32 @@
|
|||||||
if (!cloneableClasses[className] || (!support.nodeClass && isNode(value))) {
|
if (!cloneableClasses[className] || (!support.nodeClass && isNode(value))) {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
var ctor = ctorByClass[className];
|
var Ctor = value.constructor;
|
||||||
|
if (className == objectClass && !(isFunction(Ctor) && (Ctor instanceof Ctor))) {
|
||||||
|
Ctor = Object;
|
||||||
|
}
|
||||||
switch (className) {
|
switch (className) {
|
||||||
case arrayBufferClass:
|
case arrayBufferClass:
|
||||||
return value.slice();
|
return value.slice();
|
||||||
|
|
||||||
case boolClass:
|
case boolClass:
|
||||||
case dateClass:
|
case dateClass:
|
||||||
return new ctor(+value);
|
return new Ctor(+value);
|
||||||
|
|
||||||
case errorClass:
|
case errorClass:
|
||||||
return new ctor(value.message);
|
return new Ctor(value.message);
|
||||||
|
|
||||||
case f32Class: case f64Class:
|
case float32Class: case float64Class:
|
||||||
case i8Class: case i16Class: case i32Class:
|
case int8Class: case int16Class: case int32Class:
|
||||||
case u8Class: case u8cClass: case u16Class: case u32Class:
|
case uint8Class: case uint8ClampedClass: case uint16Class: case uint32Class:
|
||||||
return value.subarray(0);
|
return value.subarray(0);
|
||||||
|
|
||||||
case numberClass:
|
case numberClass:
|
||||||
case stringClass:
|
case stringClass:
|
||||||
return new ctor(value);
|
return new Ctor(value);
|
||||||
|
|
||||||
case regexpClass:
|
case regexpClass:
|
||||||
result = ctor(value.source, reFlags.exec(value));
|
result = Ctor(value.source, reFlags.exec(value));
|
||||||
result.lastIndex = value.lastIndex;
|
result.lastIndex = value.lastIndex;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -1271,7 +1263,7 @@
|
|||||||
return stackB[length];
|
return stackB[length];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
result = isArr ? ctor(value.length) : {};
|
result = isArr ? Ctor(value.length) : Ctor();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
result = isArr ? slice(value) : baseAssign({}, value);
|
result = isArr ? slice(value) : baseAssign({}, value);
|
||||||
@@ -2554,13 +2546,13 @@
|
|||||||
* @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
|
* @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
|
||||||
*/
|
*/
|
||||||
function shimIsPlainObject(value) {
|
function shimIsPlainObject(value) {
|
||||||
var ctor,
|
var Ctor,
|
||||||
result;
|
result;
|
||||||
|
|
||||||
// avoid non `Object` objects, `arguments` objects, and DOM elements
|
// avoid non `Object` objects, `arguments` objects, and DOM elements
|
||||||
if (!(value && toString.call(value) == objectClass) ||
|
if (!(value && toString.call(value) == objectClass) ||
|
||||||
(!hasOwnProperty.call(value, 'constructor') &&
|
(!hasOwnProperty.call(value, 'constructor') &&
|
||||||
(ctor = value.constructor, isFunction(ctor) && !(ctor instanceof ctor))) ||
|
(Ctor = value.constructor, isFunction(Ctor) && !(Ctor instanceof Ctor))) ||
|
||||||
(!support.argsClass && isArguments(value)) ||
|
(!support.argsClass && isArguments(value)) ||
|
||||||
(!support.nodeClass && isNode(value))) {
|
(!support.nodeClass && isNode(value))) {
|
||||||
return false;
|
return false;
|
||||||
@@ -6937,11 +6929,11 @@
|
|||||||
* // => ['x', 'y'] (property order is not guaranteed across environments)
|
* // => ['x', 'y'] (property order is not guaranteed across environments)
|
||||||
*/
|
*/
|
||||||
var keys = !nativeKeys ? shimKeys : function(object) {
|
var keys = !nativeKeys ? shimKeys : function(object) {
|
||||||
var ctor = object && object.constructor,
|
var Ctor = object && object.constructor,
|
||||||
length = object ? object.length : 0;
|
length = object ? object.length : 0;
|
||||||
|
|
||||||
if ((typeof length == 'number' && length > 0) ||
|
if ((typeof length == 'number' && length > 0) ||
|
||||||
(ctor && object === ctor.prototype)) {
|
(Ctor && object === Ctor.prototype)) {
|
||||||
return shimKeys(object);
|
return shimKeys(object);
|
||||||
}
|
}
|
||||||
return isObject(object) ? nativeKeys(object) : [];
|
return isObject(object) ? nativeKeys(object) : [];
|
||||||
@@ -6977,9 +6969,9 @@
|
|||||||
(support.nonEnumArgs && isArguments(object))) && length) >>> 0;
|
(support.nonEnumArgs && isArguments(object))) && length) >>> 0;
|
||||||
|
|
||||||
var keyIndex,
|
var keyIndex,
|
||||||
ctor = object.constructor,
|
Ctor = object.constructor,
|
||||||
index = -1,
|
index = -1,
|
||||||
isProto = ctor && object === ctor.prototype,
|
isProto = Ctor && object === Ctor.prototype,
|
||||||
maxIndex = length - 1,
|
maxIndex = length - 1,
|
||||||
result = Array(length),
|
result = Array(length),
|
||||||
skipIndexes = length > 0,
|
skipIndexes = length > 0,
|
||||||
@@ -6989,6 +6981,10 @@
|
|||||||
while (++index < length) {
|
while (++index < length) {
|
||||||
result[index] = String(index);
|
result[index] = String(index);
|
||||||
}
|
}
|
||||||
|
// Lo-Dash skips the `constructor` property when it infers it's iterating
|
||||||
|
// over a `prototype` object because IE < 9 can't set the `[[Enumerable]]`
|
||||||
|
// attribute of an existing property and the `constructor` property of a
|
||||||
|
// prototype defaults to non-enumerable.
|
||||||
for (var key in object) {
|
for (var key in object) {
|
||||||
if (!(isProto && key == 'constructor') &&
|
if (!(isProto && key == 'constructor') &&
|
||||||
!(skipProto && key == 'prototype') &&
|
!(skipProto && key == 'prototype') &&
|
||||||
@@ -6997,10 +6993,6 @@
|
|||||||
result.push(key);
|
result.push(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Lo-Dash skips the `constructor` property when it infers it's iterating
|
|
||||||
// over a `prototype` object because IE < 9 can't set the `[[Enumerable]]`
|
|
||||||
// attribute of an existing property and the `constructor` property of a
|
|
||||||
// prototype defaults to non-enumerable.
|
|
||||||
if (support.nonEnumShadows && object !== objectProto) {
|
if (support.nonEnumShadows && object !== objectProto) {
|
||||||
index = -1;
|
index = -1;
|
||||||
length = shadowedProps.length;
|
length = shadowedProps.length;
|
||||||
@@ -7262,8 +7254,8 @@
|
|||||||
accumulator = [];
|
accumulator = [];
|
||||||
} else {
|
} else {
|
||||||
if (isObject(object)) {
|
if (isObject(object)) {
|
||||||
var ctor = object.constructor,
|
var Ctor = object.constructor,
|
||||||
proto = ctor && ctor.prototype;
|
proto = Ctor && Ctor.prototype;
|
||||||
}
|
}
|
||||||
accumulator = baseCreate(proto);
|
accumulator = baseCreate(proto);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user