Simplify support property detection.

This commit is contained in:
John-David Dalton
2014-07-30 00:00:22 -07:00
parent 9032cc0ecc
commit 5cbc44610c
3 changed files with 15 additions and 20 deletions

View File

@@ -852,8 +852,6 @@
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 strKey in 'x') {}
/** /**
* Detect if the `[[Class]]` of `arguments` objects is resolvable * Detect if the `[[Class]]` of `arguments` objects is resolvable
@@ -912,7 +910,7 @@
* @memberOf _.support * @memberOf _.support
* @type boolean * @type boolean
*/ */
support.nonEnumStrings = strKey != '0'; support.nonEnumStrings = !propertyIsEnumerable.call('x', 0);
/** /**
* Detect if properties shadowing those on `Object.prototype` are * Detect if properties shadowing those on `Object.prototype` are
@@ -1001,7 +999,7 @@
* @type boolean * @type boolean
*/ */
try { try {
support.nonEnumArgs = !(hasOwnProperty.call(arguments, 1) && propertyIsEnumerable.call(arguments, 1)); support.nonEnumArgs = !propertyIsEnumerable.call(arguments, 1);
} catch(e) { } catch(e) {
support.nonEnumArgs = true; support.nonEnumArgs = true;
} }

View File

@@ -100,19 +100,16 @@
setProperty(Object, '_keys', Object.keys); setProperty(Object, '_keys', Object.keys);
setProperty(Object, 'keys', noop); setProperty(Object, 'keys', noop);
setProperty(objectProto, 'hasOwnProperty', (function() { setProperty(objectProto, '_propertyIsEnumerable', propertyIsEnumerable);
function wrapper(key) { setProperty(objectProto, 'propertyIsEnumerable', function(key) {
if (key == '1' && this && typeof this == 'object' && this.length === 2 && if (key == '1' && this && typeof this == 'object' && this.length === 2 &&
hasOwnProperty.call(this, 'callee') && hasOwnProperty.call(this, 'callee') &&
!propertyIsEnumerable.call(this, 'callee') && !propertyIsEnumerable.call(this, 'callee') &&
this[0] === 0 && this[1] === 0) { this[0] === 0 && this[1] === 0) {
throw new Error; throw new Error;
}
return hasOwnProperty.call(this, key);
} }
setProperty(objectProto, '_hasOwnProperty', hasOwnProperty); return propertyIsEnumerable.call(this, key);
return wrapper; });
}()));
setProperty(Number, '_isFinite', Number.isFinite); setProperty(Number, '_isFinite', Number.isFinite);
setProperty(Number, 'isFinite', noop); setProperty(Number, 'isFinite', noop);
@@ -228,7 +225,7 @@
} else { } else {
delete stringProto.contains; delete stringProto.contains;
} }
setProperty(objectProto, 'hasOwnProperty', objectProto._hasOwnProperty); setProperty(objectProto, 'propertyIsEnumerable', objectProto._propertyIsEnumerable);
document.createDocumentFragment = document._createDocumentFragment; document.createDocumentFragment = document._createDocumentFragment;
setProperty(document, '_createDocumentFragment', undefined); setProperty(document, '_createDocumentFragment', undefined);

View File

@@ -375,8 +375,8 @@
var _keys = Object.keys; var _keys = Object.keys;
setProperty(Object, 'keys', _.noop); setProperty(Object, 'keys', _.noop);
var _hasOwnProperty = objectProto.hasOwnProperty; var _propertyIsEnumerable = objectProto.propertyIsEnumerable;
setProperty(objectProto, 'hasOwnProperty', function(key) { setProperty(objectProto, 'propertyIsEnumerable', function(key) {
if (key == '1' && _.isArguments(this) && _.isEqual(_.values(this), [0, 0])) { if (key == '1' && _.isArguments(this) && _.isEqual(_.values(this), [0, 0])) {
throw new Error; throw new Error;
} }
@@ -463,7 +463,7 @@
setProperty(Object, 'getPrototypeOf', _getPrototypeOf); setProperty(Object, 'getPrototypeOf', _getPrototypeOf);
setProperty(Object, 'keys', _keys); setProperty(Object, 'keys', _keys);
setProperty(objectProto, 'hasOwnProperty', _hasOwnProperty); setProperty(objectProto, 'propertyIsEnumerable', _propertyIsEnumerable);
setProperty(root, 'parseInt', _parseInt); setProperty(root, 'parseInt', _parseInt);
if (_isFinite) { if (_isFinite) {